// runDetached verifies a detached signature func (e *PGPVerify) runDetached(ctx *Context) error { sk, err := NewScanKeys(ctx.SecretUI, ctx.IdentifyUI, &e.arg.TrackOptions, e.G()) if err != nil { return err } checkfn := openpgp.CheckDetachedSignature if libkb.IsArmored(e.arg.Signature) { checkfn = openpgp.CheckArmoredDetachedSignature } signer, err := checkfn(sk, e.peek, bytes.NewReader(e.arg.Signature)) if err != nil { return err } e.owner = sk.Owner() e.signStatus = &libkb.SignatureStatus{IsSigned: true} if signer != nil { e.signStatus.Verified = true e.signStatus.Entity = signer if err := e.checkSignedBy(ctx); err != nil { return err } var r io.Reader = bytes.NewReader(e.arg.Signature) if libkb.IsArmored(e.arg.Signature) { block, err := armor.Decode(r) if err != nil { return err } r = block.Body } p, err := packet.Read(r) if err != nil { return err } if val, ok := p.(*packet.Signature); ok { e.signStatus.SignatureTime = val.CreationTime } fingerprint := libkb.PGPFingerprint(signer.PrimaryKey.Fingerprint) OutputSignatureSuccess(ctx, fingerprint, sk.Owner(), e.signStatus.SignatureTime) } return nil }
func NewPGPKeyImportEngineFromBytes(key []byte, pushPrivate bool, gc *libkb.GlobalContext) (eng *PGPKeyImportEngine, err error) { var bundle *libkb.PGPKeyBundle if libkb.IsArmored(key) { bundle, err = libkb.ReadPrivateKeyFromString(string(key)) } else { bundle, err = libkb.ReadOneKeyFromBytes(key) } if err != nil { return } arg := PGPKeyImportEngineArg{ Pregen: bundle, PushSecret: pushPrivate, AllowMulti: true, DoExport: false, DoUnlock: true, Ctx: gc, } eng = NewPGPKeyImportEngine(arg) return }