feat: ecsign support sha256 digest

This commit is contained in:
2025-07-19 10:32:54 +08:00
parent 86da1a5093
commit cd68188eb5

View File

@@ -40,11 +40,13 @@ func parseGenerateSecureEnclaveP256KeyPairRequest() -> GenerateSecureEnclaveP256
struct ComputeP256EcSignRequest {
var dataRepresentationBase64: String
var messageBase64: String
var messageType: String
}
func parseComputeP256EcSignRequest() -> ComputeP256EcSignRequest? {
var dataRepresentationBase64Opt: String?
var messageBase64Opt: String?
var messageTypeOpt: String?
let len = CommandLine.arguments.count;
if CommandLine.arguments.count > 2 {
var i = 2
@@ -56,6 +58,9 @@ func parseComputeP256EcSignRequest() -> ComputeP256EcSignRequest? {
} else if (k == "--message-base64") {
messageBase64Opt = CommandLine.arguments[i + 1]
i += 2
} else if (k == "--message-type") {
messageTypeOpt = CommandLine.arguments[i + 1]
i += 2;
} else {
i += 1
}
@@ -71,7 +76,8 @@ func parseComputeP256EcSignRequest() -> ComputeP256EcSignRequest? {
}
return ComputeP256EcSignRequest(
dataRepresentationBase64: dataRepresentationBase64,
messageBase64: messageBase64
messageBase64: messageBase64,
messageType: messageTypeOpt ?? "raw"
)
}
@@ -79,6 +85,7 @@ func parseExternalSignRequest() -> ComputeP256EcSignRequest? {
var algOpt: String?
var dataRepresentationBase64Opt: String?
var messageBase64Opt: String?
var messageTypeOpt: String?
let len = CommandLine.arguments.count;
if CommandLine.arguments.count > 2 {
var i = 2
@@ -93,6 +100,9 @@ func parseExternalSignRequest() -> ComputeP256EcSignRequest? {
} else if (k == "--alg") {
algOpt = CommandLine.arguments[i + 1]
i += 2
} else if (k == "--message-type") {
messageTypeOpt = CommandLine.arguments[i + 1]
i += 2;
} else {
i += 1
}
@@ -116,7 +126,8 @@ func parseExternalSignRequest() -> ComputeP256EcSignRequest? {
}
return ComputeP256EcSignRequest(
dataRepresentationBase64: dataRepresentationBase64,
messageBase64: messageBase64
messageBase64: messageBase64,
messageType: messageTypeOpt ?? "raw"
)
}
@@ -400,8 +411,16 @@ func computeSecureEnclaveP256Ecsign(request: ComputeP256EcSignRequest) -> Comput
authenticationContext: context
)
let digest = SHA256.hash(data: contentData)
let signature = try p.signature(for: digest)
let signature: P256.Signing.ECDSASignature
if (request.messageType == "raw") {
let digest = SHA256.hash(data: contentData)
signature = try p.signature(for: digest)
} else if (request.messageType == "sha256") {
signature = try p.signature(for: contentData)
} else {
exitError("not supported message type: \(request.messageType)")
return nil
}
return ComputeSecureEnclaveP256EcsignResponse(
success: true,
@@ -539,7 +558,7 @@ if (command == "help" || command == "-h" || command == "--help") {
print("generate_p256_ecdh_keypair --control-flag <> - generate Secure Enclave P256 EC DH key pair")
print("recover_p256_ecsign_public_key --private-key <> - recover Secure Enclave P256 EC sign key pair")
print("recover_p256_ecdh_public_key --private-key <> - recover Secure Enclave P256 EC DH key pair")
print("compute_p256_ecsign --private-key <> --message-base64 <> - compure Secure Enclave P256 EC sign")
print("compute_p256_ecsign --private-key <> --message-base64 <> [--message-type] - compure Secure Enclave P256 EC sign")
print("compute_p256_ecdh --private-key <> --ephemera-public-key <> - compure Secure Enclave P256 EC DH")
print("external_spec - external specification")
print("external_public_key --parameter <> - external public key")