From b9bcee0815c375da509cfd675e00b29aa006c781 Mon Sep 17 00:00:00 2001 From: Lysann Tranvouez Date: Mon, 16 Mar 2026 23:09:41 +0100 Subject: [PATCH] add helper to export key metadata for pass for iOS --- helper/helper.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/helper/helper.go b/helper/helper.go index 59d4024..177d477 100644 --- a/helper/helper.go +++ b/helper/helper.go @@ -72,6 +72,41 @@ func PassGetHexSubkeyIDsJSON(key *crypto.Key) []byte { return result } +type passKeyInfo struct { + UserIDs []string `json:"userIDs"` + CreationTime int64 `json:"creationTime"` + ExpirationTime int64 `json:"expirationTime"` // 0 means no expiration +} + +func PassGetKeyInfoJSON(key *crypto.Key) []byte { + entity := key.GetEntity() + + userIDs := make([]string, 0, len(entity.Identities)) + for name := range entity.Identities { + userIDs = append(userIDs, name) + } + + creationTime := entity.PrimaryKey.CreationTime.Unix() + + var expirationTime int64 + identity := entity.PrimaryIdentity() + if identity != nil && identity.SelfSignature != nil && identity.SelfSignature.KeyLifetimeSecs != nil && *identity.SelfSignature.KeyLifetimeSecs != 0 { + expirationTime = creationTime + int64(*identity.SelfSignature.KeyLifetimeSecs) + } + + info := passKeyInfo{ + UserIDs: userIDs, + CreationTime: creationTime, + ExpirationTime: expirationTime, + } + + result, err := json.Marshal(info) + if err != nil { + return nil + } + return result +} + func PassDecryptWithSessionKey(pgpMessage *crypto.PGPMessage, sk *crypto.SessionKey) (plain_message *crypto.PlainMessage, err error) { var p packet.Packet