init: v1.0.0

This commit is contained in:
yaole
2026-05-27 23:03:00 +08:00
commit 8d97f750eb
466 changed files with 80067 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
package sm9
import (
"crypto"
"io"
)
var _ crypto.Signer = &Signer{}
var _ crypto.Decrypter = &Decrypter{}
type Signer struct {
Id []byte
Priv *UserSignKey
MastSignPublicKey *MastSignPublicKey
}
// Sign signs digest with priv, reading randomness from rand. The opts argument
// is not currently used but, in keeping with the crypto.Signer interface,
// should be the hash function used to digest the message.
func (s *Signer) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) {
signature, err := Sign(digest, s.Priv, s.MastSignPublicKey, rand)
if err != nil {
return nil, err
}
return signature.MarshalASN1(false)
}
func VerifyASN1(id []byte, hash, sig []byte, pub *MastSignPublicKey) bool {
var signature Signature
_, err := signature.UnmarshalASN1(sig)
if err != nil {
return false
}
return Verify(&signature, id, hash, pub)
}
type Decrypter struct {
Id []byte
Priv *UserEncKey
MastEncPublicKey *MastEncPublicKey
}
func (s *Signer) Public() crypto.PublicKey {
return s.Id
}
// Decrypt implements crypto.Decrypter.
func (d *Decrypter) Decrypt(rand io.Reader, msg []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error) {
var cipher Cipher
_, err = cipher.UnmarshalASN1(msg)
if err != nil {
return nil, err
}
return Decrypt(d.Id, &cipher, d.Priv)
}
func (d *Decrypter) Public() crypto.PublicKey {
return d.Id
}