Lines 148-188text
148 publicKeyData = pubKeyData
150 throw ECError.failedASN1Decoding
152 let trimmedPubBytes = publicKeyData.drop(while: { $0 == 0x00})
153 if trimmedPubBytes.count != publicKeyData.count {
156 self.nativeKey = try ECPrivateKey.bytesToNativeKey(privateKeyData: privateKeyData,
157 publicKeyData: trimmedPubBytes,
159 let derData = ECPrivateKey.generateASN1(privateKey: privateKeyData,
160 publicKey: publicKeyData,
162 self.pemString = ECPrivateKey.derToPrivatePEM(derData: derData)
163 self.pubKeyBytes = trimmedPubBytes
164 self.curveId = curve.description
167 /// Initialize an ECPrivateKey from a SEC1 `.der` file data.
168 /// This is equivalent to a PEM String that has had the "-----BEGIN EC PRIVATE KEY-----"
169 /// header and footer stripped and been base64 encoded to ASN1 Data.
170 /// - Parameter sec1DER: The elliptic curve private key Data.
171 /// - Returns: An ECPrivateKey.
172 /// - Throws: An ECError if the Data can't be decoded or is not a valid key.
173 public init(sec1DER: Data) throws {
174 self.pemString = ECPrivateKey.derToPrivatePEM(derData: sec1DER)
175 let (result, _) = ASN1.toASN1Element(data: sec1DER)
176 guard case let ASN1.ASN1Element.seq(elements: seq) = result,
178 case let ASN1.ASN1Element.constructed(tag: _, elem: objectElement) = seq[2],
179 case let ASN1.ASN1Element.bytes(data: objectId) = objectElement,
180 case let ASN1.ASN1Element.bytes(data: privateKeyData) = seq[1]
182 throw ECError.failedASN1Decoding
184 self.curve = try EllipticCurve.objectToCurve(ObjectIdentifier: objectId)
185 guard case let ASN1.ASN1Element.constructed(tag: _, elem: publicElement) = seq[3],
186 case let ASN1.ASN1Element.bytes(data: publicKeyData) = publicElement
188 throw ECError.failedASN1Decoding