Posts

Post marked as solved
2 Replies
1.8k Views
I've been reading previous threads such as this about how to import openssl generated keys using SecKeyCreateWithData but always get the error Code=-50 "EC private key creation from data failed". I understand that SecKeyCreateWithData doesn't allow the standard headers that openssl generates, but even after converting the bit string section to a binary file, it refuses to load.This is the command I use to generate the key:openssl ecparam -name prime256v1 -genkey -noout -out openssl.key -outform derUsing dumpasn1:$ ~/Desktop/dumpasn1 -w76 openssl.key 0 119: SEQUENCE { 2 1: INTEGER 1 5 32: OCTET STRING : 67 BF 75 38 C7 14 38 88 4C DD BC 91 A5 5C 88 10 : DE 0C 6F EE A7 2B 85 75 19 EC 71 1D 91 BD FD E3 39 10: [0] { 41 8: OBJECT IDENTIFIER prime256v1 (1 2 840 10045 3 1 7) : } 51 68: [1] { 53 66: BIT STRING : 04 5A C4 BB DE 43 15 25 9E E2 A3 CD D8 80 0E 12 : 57 24 0D 68 BD 22 61 57 D9 87 F8 E2 16 DD 8C 02 : AD 73 4F D0 69 6F F0 61 0D FD FB 4D EB F1 45 C0 : AB D4 46 82 B6 DB 69 62 8F C9 7C C9 07 09 0C 91 : 91 : } : }If I trim off the headers:$ dd if=openssl.key of=stripped.openssl.key skip=56 bs=1 65+0 records in 65+0 records out 65 bytes transferred in 0.000320 secs (203001 bytes/sec) $ hexdump -Cv stripped.openssl.key 00000000 04 5a c4 bb de 43 15 25 9e e2 a3 cd d8 80 0e 12 |.Z...C.%........| 00000010 57 24 0d 68 bd 22 61 57 d9 87 f8 e2 16 dd 8c 02 |W$.h."aW........| 00000020 ad 73 4f d0 69 6f f0 61 0d fd fb 4d eb f1 45 c0 |.sO.io.a...M..E.| 00000030 ab d4 46 82 b6 db 69 62 8f c9 7c c9 07 09 0c 91 |..F...ib..|.....| 00000040 91 |.| 00000041It's 65 bytes beginning with 04, which I believe it just the keydata. This refuses to load on iOS with the error:var error: Unmanaged? guard let key = SecKeyCreateWithData(privateKey as CFData, [kSecAttrKeyType: kSecAttrKeyTypeECSECPrimeRandom, kSecAttrKeyClass: kSecAttrKeyClassPrivate, kSecAttrKeySizeInBits: 256] as CFDictionary, &error)key length: 65 failed - Failed to create key: Unmanaged(_value: Error Domain=NSOSStatusErrorDomain Code=-50 "EC private key creation from data failed" UserInfo={NSDescription=EC private key creation from data failed}) However, it will load as a public key which I don't understand.I tried creating a key in iOS then saving it as data and it generates a larger size (97 vs 65) but it will succesfully load.$ hexdump -Cv ios.private.key 00000000 04 6b 17 c3 46 32 db 10 02 9a 2b 02 de 53 89 c3 |.k..F2....+..S..| 00000010 87 71 d3 bf b6 1a 64 c0 0e e1 35 6e 1c 9f af 5f |.q....d...5n..._| 00000020 70 d2 05 ba fc 4e fb 5a e2 93 6a 68 12 b1 18 a8 |p....N.Z..jh....| 00000030 c3 f1 2a db aa 77 a1 e0 57 bc d9 23 6c a4 82 c7 |..*..w..W..#l...| 00000040 75 a9 d0 e0 01 76 6c de 8d f0 22 64 a0 4e 06 bf |u....vl..."d.N..| 00000050 c3 0e b1 4d 45 3e fc 9f f1 a4 4b e3 85 e0 0f 07 |...ME>....K.....| 00000060 bd |.| 00000061I just want to understand what these extra bytes are and how to get a openssl-generated key to load in iOS.Thanks
Posted
by jasongz.
Last updated
.