Search in sources :

Example 1 with AttestationObject

use of com.yubico.webauthn.data.AttestationObject in project java-webauthn-server by Yubico.

the class CryptoAlgorithmsTest method importEddsa.

@Test
public void importEddsa() throws IOException, CoseException, NoSuchAlgorithmException, InvalidKeySpecException {
    PublicKey key = WebAuthnCodecs.importCosePublicKey(new AttestationObject(RegistrationTestData.Packed$.MODULE$.BasicAttestationEdDsa().attestationObject()).getAuthenticatorData().getAttestedCredentialData().get().getCredentialPublicKey());
    assertTrue("EdDSA".equals(key.getAlgorithm()) || "Ed25519".equals(key.getAlgorithm()));
}
Also used : PublicKey(java.security.PublicKey) AttestationObject(com.yubico.webauthn.data.AttestationObject) Test(org.junit.Test)

Example 2 with AttestationObject

use of com.yubico.webauthn.data.AttestationObject in project java-webauthn-server by Yubico.

the class CryptoAlgorithmsTest method importEcdsa.

@Test
public void importEcdsa() throws IOException, CoseException, NoSuchAlgorithmException, InvalidKeySpecException {
    PublicKey key = WebAuthnCodecs.importCosePublicKey(new AttestationObject(RegistrationTestData.Packed$.MODULE$.BasicAttestation().attestationObject()).getAuthenticatorData().getAttestedCredentialData().get().getCredentialPublicKey());
    assertEquals(key.getAlgorithm(), "EC");
}
Also used : PublicKey(java.security.PublicKey) AttestationObject(com.yubico.webauthn.data.AttestationObject) Test(org.junit.Test)

Example 3 with AttestationObject

use of com.yubico.webauthn.data.AttestationObject in project java-webauthn-server by Yubico.

the class CryptoAlgorithmsTest method importRsa.

@Test
public void importRsa() throws IOException, CoseException, NoSuchAlgorithmException, InvalidKeySpecException {
    PublicKey key = WebAuthnCodecs.importCosePublicKey(new AttestationObject(RegistrationTestData.Packed$.MODULE$.BasicAttestationRsa().attestationObject()).getAuthenticatorData().getAttestedCredentialData().get().getCredentialPublicKey());
    assertEquals(key.getAlgorithm(), "RSA");
}
Also used : PublicKey(java.security.PublicKey) AttestationObject(com.yubico.webauthn.data.AttestationObject) Test(org.junit.Test)

Example 4 with AttestationObject

use of com.yubico.webauthn.data.AttestationObject in project java-webauthn-server by Yubico.

the class FidoU2fAttestationStatementVerifier method verifyAttestationSignature.

@Override
public boolean verifyAttestationSignature(AttestationObject attestationObject, ByteArray clientDataJsonHash) {
    final X509Certificate attestationCertificate;
    try {
        attestationCertificate = getAttestationCertificate(attestationObject);
    } catch (CertificateException e) {
        throw new IllegalArgumentException(String.format("Failed to parse X.509 certificate from attestation object: %s", attestationObject));
    }
    if (!("EC".equals(attestationCertificate.getPublicKey().getAlgorithm()) && isP256(((ECPublicKey) attestationCertificate.getPublicKey()).getParams()))) {
        throw new IllegalArgumentException("Attestation certificate for fido-u2f must have an ECDSA P-256 public key.");
    }
    final Optional<AttestedCredentialData> attData = attestationObject.getAuthenticatorData().getAttestedCredentialData();
    return attData.map(attestedCredentialData -> {
        JsonNode signature = attestationObject.getAttestationStatement().get("sig");
        if (signature == null) {
            throw new IllegalArgumentException("fido-u2f attestation statement must have a \"sig\" property set to a DER encoded signature.");
        }
        if (signature.isBinary()) {
            final ByteArray userPublicKey;
            try {
                userPublicKey = getRawUserPublicKey(attestationObject);
            } catch (IOException | CoseException e) {
                RuntimeException err = new RuntimeException(String.format("Failed to parse public key from attestation data %s", attestedCredentialData), e);
                log.error(err.getMessage(), err);
                throw err;
            }
            ByteArray keyHandle = attestedCredentialData.getCredentialId();
            U2fRawRegisterResponse u2fRegisterResponse;
            try {
                u2fRegisterResponse = new U2fRawRegisterResponse(userPublicKey, keyHandle, attestationCertificate, new ByteArray(signature.binaryValue()));
            } catch (IOException e) {
                RuntimeException err = new RuntimeException("signature.isBinary() was true but signature.binaryValue() failed", e);
                log.error(err.getMessage(), err);
                throw err;
            }
            return u2fRegisterResponse.verifySignature(attestationObject.getAuthenticatorData().getRpIdHash(), clientDataJsonHash);
        } else {
            throw new IllegalArgumentException("\"sig\" property of fido-u2f attestation statement must be a CBOR byte array value.");
        }
    }).orElseThrow(() -> new IllegalArgumentException("Attestation object for credential creation must have attestation data."));
}
Also used : AttestedCredentialData(com.yubico.webauthn.data.AttestedCredentialData) X509Certificate(java.security.cert.X509Certificate) Crypto.isP256(com.yubico.webauthn.Crypto.isP256) AttestationObject(com.yubico.webauthn.data.AttestationObject) AttestedCredentialData(com.yubico.webauthn.data.AttestedCredentialData) InvalidKeySpecException(java.security.spec.InvalidKeySpecException) CoseException(COSE.CoseException) IOException(java.io.IOException) PublicKey(java.security.PublicKey) CertificateException(java.security.cert.CertificateException) Slf4j(lombok.extern.slf4j.Slf4j) ExceptionUtil(com.yubico.internal.util.ExceptionUtil) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) Optional(java.util.Optional) JsonNode(com.fasterxml.jackson.databind.JsonNode) ByteArray(com.yubico.webauthn.data.ByteArray) AttestationType(com.yubico.webauthn.data.AttestationType) ECPublicKey(java.security.interfaces.ECPublicKey) ECPublicKey(java.security.interfaces.ECPublicKey) ByteArray(com.yubico.webauthn.data.ByteArray) CertificateException(java.security.cert.CertificateException) JsonNode(com.fasterxml.jackson.databind.JsonNode) IOException(java.io.IOException) X509Certificate(java.security.cert.X509Certificate)

Aggregations

AttestationObject (com.yubico.webauthn.data.AttestationObject)4 PublicKey (java.security.PublicKey)4 Test (org.junit.Test)3 CoseException (COSE.CoseException)1 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 ExceptionUtil (com.yubico.internal.util.ExceptionUtil)1 Crypto.isP256 (com.yubico.webauthn.Crypto.isP256)1 AttestationType (com.yubico.webauthn.data.AttestationType)1 AttestedCredentialData (com.yubico.webauthn.data.AttestedCredentialData)1 ByteArray (com.yubico.webauthn.data.ByteArray)1 IOException (java.io.IOException)1 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)1 CertificateException (java.security.cert.CertificateException)1 X509Certificate (java.security.cert.X509Certificate)1 ECPublicKey (java.security.interfaces.ECPublicKey)1 InvalidKeySpecException (java.security.spec.InvalidKeySpecException)1 Optional (java.util.Optional)1 Slf4j (lombok.extern.slf4j.Slf4j)1