public static PublicKey oneKeyToP256PublicKey()

in java/remoteprovisioning/CryptoUtil.java [314:349]


  public static PublicKey oneKeyToP256PublicKey(OneKey key) throws CborException, CryptoException {
    if (!key.get(KeyKeys.KeyType).equals(KeyKeys.KeyType_EC2)) {
      throw new CborException(
          "Key has unexpected key type (kty)",
          KeyKeys.KeyType_EC2.AsInt32(),
          key.get(KeyKeys.KeyType).AsInt32(),
          CborException.INCORRECT_COSE_TYPE);
    }
    if (!key.get(KeyKeys.Algorithm).equals(AlgorithmID.ECDSA_256.AsCBOR())) {
      throw new CborException(
          "Key has unexpected algorithm",
          AlgorithmID.ECDSA_256.AsCBOR().AsInt32(),
          key.get(KeyKeys.Algorithm).AsInt32(),
          CborException.INCORRECT_COSE_TYPE);
    }
    if (!key.get(KeyKeys.EC2_Curve).equals(KeyKeys.EC2_P256)) {
      throw new CborException(
          "Key has unexpected curve",
          KeyKeys.EC2_P256.AsInt32(),
          key.get(KeyKeys.EC2_Curve).AsInt32(),
          CborException.INCORRECT_COSE_TYPE);
    }
    try {
      BigInteger x = new BigInteger(1 /* positive */, key.get(KeyKeys.EC2_X).GetByteString());
      BigInteger y = new BigInteger(1 /* positive */, key.get(KeyKeys.EC2_Y).GetByteString());
      AlgorithmParameters parameters = AlgorithmParameters.getInstance("EC");
      parameters.init(new ECGenParameterSpec("secp256r1"));
      ECParameterSpec ecParameters = parameters.getParameterSpec(ECParameterSpec.class);
      ECPoint point = new ECPoint(x, y);
      ECPublicKeySpec keySpec = new ECPublicKeySpec(point, ecParameters);
      KeyFactory keyFactory = KeyFactory.getInstance("EC");
      return keyFactory.generatePublic(keySpec);
    } catch (NoSuchAlgorithmException | InvalidParameterSpecException | InvalidKeySpecException e) {
      throw new CryptoException("No support for P256.", e, CryptoException.NO_SUCH_ALGORITHM);
    }
  }