diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2025-01-27 09:14:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-27 09:14:08 +0800 |
commit | 517a367abea52fc96a1a8002c87bc20b8528dcd3 (patch) | |
tree | cf4c325394667eacadd2bb4cce24f592498c355c /models/asymkey/gpg_key.go | |
parent | fae69bc6d4cbe3c93db9d33dc25e52f0ef267ddb (diff) | |
download | gitea-517a367abea52fc96a1a8002c87bc20b8528dcd3.tar.gz gitea-517a367abea52fc96a1a8002c87bc20b8528dcd3.zip |
Use ProtonMail/go-crypto to replace keybase/go-crypto (#33402)
Fix #33400
The keybase/go-crypto is no longer maintained and it generates malformed
signatures, ProtonMail/go-crypto is the actively maintained fork.
Diffstat (limited to 'models/asymkey/gpg_key.go')
-rw-r--r-- | models/asymkey/gpg_key.go | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/models/asymkey/gpg_key.go b/models/asymkey/gpg_key.go index 5236b2d450..e921340730 100644 --- a/models/asymkey/gpg_key.go +++ b/models/asymkey/gpg_key.go @@ -13,8 +13,8 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/timeutil" - "github.com/keybase/go-crypto/openpgp" - "github.com/keybase/go-crypto/openpgp/packet" + "github.com/ProtonMail/go-crypto/openpgp" + "github.com/ProtonMail/go-crypto/openpgp/packet" "xorm.io/builder" ) @@ -141,7 +141,11 @@ func parseGPGKey(ctx context.Context, ownerID int64, e *openpgp.Entity, verified // Parse Subkeys subkeys := make([]*GPGKey, len(e.Subkeys)) for i, k := range e.Subkeys { - subs, err := parseSubGPGKey(ownerID, pubkey.KeyIdString(), k.PublicKey, expiry) + subkeyExpiry := expiry + if k.Sig.KeyLifetimeSecs != nil { + subkeyExpiry = k.PublicKey.CreationTime.Add(time.Duration(*k.Sig.KeyLifetimeSecs) * time.Second) + } + subs, err := parseSubGPGKey(ownerID, pubkey.KeyIdString(), k.PublicKey, subkeyExpiry) if err != nil { return nil, ErrGPGKeyParsing{ParseError: err} } @@ -156,7 +160,7 @@ func parseGPGKey(ctx context.Context, ownerID int64, e *openpgp.Entity, verified emails := make([]*user_model.EmailAddress, 0, len(e.Identities)) for _, ident := range e.Identities { - if ident.Revocation != nil { + if ident.Revoked(time.Now()) { continue } email := strings.ToLower(strings.TrimSpace(ident.UserId.Email)) |