Bouncy Castle Cryptography Library 1.48

org.bouncycastle.pqc.jcajce.provider.rainbow
Class RainbowKeyFactorySpi

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

public class RainbowKeyFactorySpi
extends java.security.KeyFactorySpi
implements org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter

This class transforms Rainbow keys and Rainbow key specifications.

See Also:
BCRainbowPublicKey, RainbowPublicKeySpec, BCRainbowPrivateKey, RainbowPrivateKeySpec

Constructor Summary
RainbowKeyFactorySpi()
           
 
Method Summary
 java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec keySpec)
          Converts, if possible, a key specification into a BCRainbowPrivateKey.
 java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec keySpec)
          Converts, if possible, a key specification into a BCRainbowPublicKey.
 java.security.spec.KeySpec engineGetKeySpec(java.security.Key key, java.lang.Class keySpec)
          Converts a given key into a key specification, if possible.
 java.security.Key engineTranslateKey(java.security.Key key)
          Translates a key into a form known by the FlexiProvider.
 java.security.PrivateKey generatePrivate(PrivateKeyInfo keyInfo)
           
 java.security.PublicKey generatePublic(SubjectPublicKeyInfo keyInfo)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RainbowKeyFactorySpi

public RainbowKeyFactorySpi()
Method Detail

engineGeneratePrivate

public java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec keySpec)
                                               throws java.security.spec.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 java.security.KeyFactorySpi
Parameters:
keySpec - the key specification
Returns:
the Rainbow private key
Throws:
java.security.spec.InvalidKeySpecException - if the KeySpec is not supported.

engineGeneratePublic

public java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec keySpec)
                                             throws java.security.spec.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 java.security.KeyFactorySpi
Parameters:
keySpec - the key specification
Returns:
the Rainbow public key
Throws:
java.security.spec.InvalidKeySpecException - if the KeySpec is not supported.

engineGetKeySpec

public final java.security.spec.KeySpec engineGetKeySpec(java.security.Key key,
                                                         java.lang.Class keySpec)
                                                  throws java.security.spec.InvalidKeySpecException
Converts a given key into a key specification, if possible. Currently the following specs are supported:

Specified by:
engineGetKeySpec in class java.security.KeyFactorySpi
Parameters:
key - the key
keySpec - the key specification
Returns:
the specification of the CMSS key
Throws:
java.security.spec.InvalidKeySpecException - if the key type or key specification is not supported.

engineTranslateKey

public final java.security.Key engineTranslateKey(java.security.Key key)
                                           throws java.security.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 java.security.KeyFactorySpi
Parameters:
key - the key
Returns:
a key of a known key type
Throws:
java.security.InvalidKeyException - if the key is not supported.

generatePrivate

public java.security.PrivateKey generatePrivate(PrivateKeyInfo keyInfo)
                                         throws java.io.IOException
Specified by:
generatePrivate in interface org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
Throws:
java.io.IOException

generatePublic

public java.security.PublicKey generatePublic(SubjectPublicKeyInfo keyInfo)
                                       throws java.io.IOException
Specified by:
generatePublic in interface org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter
Throws:
java.io.IOException

Bouncy Castle Cryptography Library 1.48