#ios #swift #signature #crypto #xcode11.5
Вопрос:
Я действительно сгенерировал подпись, используя приведенный ниже код, но мне нужна подпись в формате IEEE P1336 (длина 80)
guard let signData = SecKeyCreateSignature(
key,
SecKeyAlgorithm.ecdsaSignatureMessageX962SHA256,
signatureString.data(using: .utf8)! as CFData, amp;error) else {
let e = error!.takeRetainedValue() as Error
print("Signing Error ( e.localizedDescription)")
return nil
}
let signedData = signData as Data
let signedString = signedData.base64EncodedString(options: [])
Ответ №1:
Я не эксперт в iOS. Но я исправил эту проблему для подписи, сгенерированной iOS. Вы можете создать этот формат самостоятельно. например, для хэшированной подписи SHA-256. Пример JavaScript
function parseASN1ToIEEEP1363(signature) {
const buffer = new ArrayBuffer(signature.length);
const int8View = new Int8Array(buffer);
for (let i = 0, strLen = signature.length; i < strLen; i ) {
int8View[i] = signature.charCodeAt(i);
}
//Currently these bytes getting for SHA256. for other hashings need to make it dynamic
const r = new Int8Array(buffer.slice(4, 36));
const s = new Int8Array(buffer.slice(39));
return appendBuffer(r, s);
}
function appendBuffer(buffer1, buffer2) {
var tmp = new Uint8Array(buffer1.byteLength buffer2.byteLength);
tmp.set(new Uint8Array(buffer1), 0);
tmp.set(new Uint8Array(buffer2), buffer1.byteLength);
return tmp;
};