Bouncy Castle Cryptography Library 1.87

org.bouncycastle.crypto.params
Class SM9SigMasterPrivateKeyParameters

java.lang.Object
  extended byorg.bouncycastle.crypto.params.AsymmetricKeyParameter
      extended byorg.bouncycastle.crypto.params.SM9SigMasterPrivateKeyParameters
All Implemented Interfaces:
CipherParameters, javax.security.auth.Destroyable, SM9SigUserKeyParametersGenerator

public class SM9SigMasterPrivateKeyParameters
extends AsymmetricKeyParameter
implements javax.security.auth.Destroyable, SM9SigUserKeyParametersGenerator

SM9 signature master private key ks (GM/T 0044.2-2016). Held by the Key Generation Center (KGC); derives the master public key P_pub-s = [ks]P2 and users' signature private keys from their identities.


Field Summary
static byte HID
          The signature private-key generation function identifier hid, fixed to 0x01 for the SM9 signature algorithm by GM/T 0080-2020 8.1 and GB/T 41389-2022 6.3.1; GM/T 0044.2-2016 leaves it to the KGC and assigns no value.
 
Constructor Summary
SM9SigMasterPrivateKeyParameters(java.math.BigInteger ks)
           
 
Method Summary
 void destroy()
          Destroy this object, dropping its reference to the master secret ks.
static SM9SigMasterPrivateKeyParameters fromEncoded(byte[] enc)
           
static SM9SigMasterPrivateKeyParameters fromEncoded(byte[] enc, SM9SigMasterPublicKeyParameters publicKey)
          Rebuild a signature master key and check it against the master public key its KGC published.
 SM9SigPrivateKeyParameters generateUserKey(byte[] identity)
          Derive the signature private key for the user identified by (GM/T 0044.2-2016, 5.3): t1 = H1(identity||hid, N) + ks; if t1 = 0 the master key must be regenerated; otherwise t2 = ks*t1^-1 and ds = [t2]P1.
 byte[] getEncoded()
          The master private key ks as a 32-byte big-endian scalar.
 SM9SigMasterPublicKeyParameters getPublicKeyParameters()
           
 boolean isDestroyed()
           
 
Methods inherited from class org.bouncycastle.crypto.params.AsymmetricKeyParameter
isPrivate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

HID

public static final byte HID
The signature private-key generation function identifier hid, fixed to 0x01 for the SM9 signature algorithm by GM/T 0080-2020 8.1 and GB/T 41389-2022 6.3.1; GM/T 0044.2-2016 leaves it to the KGC and assigns no value.

See Also:
Constant Field Values
Constructor Detail

SM9SigMasterPrivateKeyParameters

public SM9SigMasterPrivateKeyParameters(java.math.BigInteger ks)
Method Detail

getPublicKeyParameters

public SM9SigMasterPublicKeyParameters getPublicKeyParameters()

getEncoded

public byte[] getEncoded()
The master private key ks as a 32-byte big-endian scalar.


fromEncoded

public static SM9SigMasterPrivateKeyParameters fromEncoded(byte[] enc)

fromEncoded

public static SM9SigMasterPrivateKeyParameters fromEncoded(byte[] enc,
                                                           SM9SigMasterPublicKeyParameters publicKey)
Rebuild a signature master key and check it against the master public key its KGC published. A key decoded from its scalar alone always agrees with the public key it derives from that scalar, so a stale or substituted scalar - still 32 bytes, still in [1, N-1] - imports as a well-formed key pair that is simply not the KGC's, and every user key it then issues is a key of that wrong public key, whose signatures verify under it and under no other; comparing against the published one catches the substitution when the master key is decoded, rather than when a verifier holding the published key rejects a signature.


generateUserKey

public SM9SigPrivateKeyParameters generateUserKey(byte[] identity)
Derive the signature private key for the user identified by (GM/T 0044.2-2016, 5.3): t1 = H1(identity||hid, N) + ks; if t1 = 0 the master key must be regenerated; otherwise t2 = ks*t1^-1 and ds = [t2]P1.

Specified by:
generateUserKey in interface SM9SigUserKeyParametersGenerator
Parameters:
identity - the user's identity.
Returns:
the user's signature private key.

destroy

public void destroy()
Destroy this object, dropping its reference to the master secret ks.

As BigInteger is immutable the secret value cannot be zeroized in place; destruction drops the reference and marks the key destroyed, after which getEncoded() and generateUserKey(byte[]) throw IllegalStateException. The public key parameters remain available.

Specified by:
destroy in interface javax.security.auth.Destroyable

isDestroyed

public boolean isDestroyed()
Specified by:
isDestroyed in interface javax.security.auth.Destroyable

Bouncy Castle Cryptography Library 1.87