Tigran
Tigran

Reputation: 5

CryptoKit sign payload and header with private key

I am trying to create a jwt token signed with Elliptic Curve Digital Signature Algorithm (ECDSA) with the P-256 curve and the SHA-256 hash algorithm. The payload and the header are created properly, but I am having problems signing it. The P256.Signing.PrivateKey(rawRepresentation: keyData) always returns nil. Can anyone please help?

    let privateKey = """
 -----BEGIN ENCRYPTED PRIVATE KEY-----
code
-----END ENCRYPTED PRIVATE KEY-----
"""
    let keyData = Data(base64Encoded: privateKey.toBase64())!
    let header = jwtHeader()

    let payload = jwtPayload()

    let signingInput = "\(header).\(payload)"

    let privateKey = try! P256.Signing.PrivateKey(rawRepresentation: keyData)

    let sig = try! privateKey.signature(for: Data(signingInput.utf8)).rawRepresentation

    return "\(signingInput).\(sig.base64URLEncodedString)"


extension String {
    func toBase64() -> String {
        return Data(self.utf8).base64EncodedString()
    }
}

Upvotes: 0

Views: 794

Answers (0)

Related Questions