Class RainbowKeyFactorySpi

java.lang.Object
java.security.KeyFactorySpi
org.bouncycastle.pqc.jcajce.provider.rainbow.RainbowKeyFactorySpi
All Implemented Interfaces:
AsymmetricKeyInfoConverter

public class RainbowKeyFactorySpi extends KeyFactorySpi implements AsymmetricKeyInfoConverter
This class transforms Rainbow keys and Rainbow key specifications.
See Also:
  • Constructor Details

    • RainbowKeyFactorySpi

      public RainbowKeyFactorySpi()
  • Method Details

    • engineGeneratePrivate

      public PrivateKey engineGeneratePrivate(KeySpec keySpec) throws InvalidKeySpecException
      Converts, if possible, a key specification into a BCRainbowPrivateKey. Currently, the following key specifications are supported: RainbowPrivateKeySpec, PKCS8EncodedKeySpec.

      The ASN.1 definition of the key structure is

         RainbowPrivateKey ::= SEQUENCE {
           oid        OBJECT IDENTIFIER         -- OID identifying the algorithm
           A1inv      SEQUENCE OF OCTET STRING  -- inversed matrix of L1
           b1         OCTET STRING              -- translation vector of L1
           A2inv      SEQUENCE OF OCTET STRING  -- inversed matrix of L2
           b2         OCTET STRING              -- translation vector of L2
           vi         OCTET STRING              -- num of elmts in each Set S
           layers     SEQUENCE OF Layer         -- layers of F
         }
      
         Layer             ::= SEQUENCE OF Poly
         Poly              ::= SEQUENCE {
           alpha      SEQUENCE OF OCTET STRING
           beta       SEQUENCE OF OCTET STRING
           gamma      OCTET STRING
           eta        OCTET
         }
       
      Specified by:
      engineGeneratePrivate in class KeyFactorySpi
      Parameters:
      keySpec - the key specification
      Returns:
      the Rainbow private key
      Throws:
      InvalidKeySpecException - if the KeySpec is not supported.
    • engineGeneratePublic

      public PublicKey engineGeneratePublic(KeySpec keySpec) throws InvalidKeySpecException
      Converts, if possible, a key specification into a BCRainbowPublicKey. Currently, the following key specifications are supported:X509EncodedKeySpec.

      The ASN.1 definition of a public key's structure is

          RainbowPublicKey ::= SEQUENCE {
            oid            OBJECT IDENTIFIER        -- OID identifying the algorithm
            docLength      Integer                  -- length of signable msg
            coeffquadratic SEQUENCE OF OCTET STRING -- quadratic (mixed) coefficients
            coeffsingular  SEQUENCE OF OCTET STRING -- singular coefficients
            coeffscalar       OCTET STRING             -- scalar coefficients
             }
       
      Specified by:
      engineGeneratePublic in class KeyFactorySpi
      Parameters:
      keySpec - the key specification
      Returns:
      the Rainbow public key
      Throws:
      InvalidKeySpecException - if the KeySpec is not supported.
    • engineGetKeySpec

      public final KeySpec engineGetKeySpec(Key key, Class keySpec) throws InvalidKeySpecException
      Converts a given key into a key specification, if possible. Currently the following specs are supported:
      • for RainbowPublicKey: X509EncodedKeySpec, RainbowPublicKeySpec
      • for RainbowPrivateKey: PKCS8EncodedKeySpec, RainbowPrivateKeySpec
      Specified by:
      engineGetKeySpec in class KeyFactorySpi
      Parameters:
      key - the key
      keySpec - the key specification
      Returns:
      the specification of the CMSS key
      Throws:
      InvalidKeySpecException - if the key type or key specification is not supported.
    • engineTranslateKey

      public final Key engineTranslateKey(Key key) throws InvalidKeyException
      Translates a key into a form known by the FlexiProvider. Currently the following key types are supported: RainbowPrivateKey, RainbowPublicKey.
      Specified by:
      engineTranslateKey in class KeyFactorySpi
      Parameters:
      key - the key
      Returns:
      a key of a known key type
      Throws:
      InvalidKeyException - if the key is not supported.
    • generatePrivate

      public PrivateKey generatePrivate(PrivateKeyInfo keyInfo) throws IOException
      Specified by:
      generatePrivate in interface AsymmetricKeyInfoConverter
      Throws:
      IOException
    • generatePublic

      public PublicKey generatePublic(SubjectPublicKeyInfo keyInfo) throws IOException
      Specified by:
      generatePublic in interface AsymmetricKeyInfoConverter
      Throws:
      IOException