Совместимость AES-GCM с Apple CryptoKit в Angular
Этот код генерирует зашифрованную и расшифрованную версию строки сообщения с использованием закрытого и открытого ключей с AES-GCM на платформе iOS с использованием платформы Apple CryptoKit.
import CryptoKit
func generatePrivateKey() -> P256.KeyAgreement.PrivateKey {
let privateKey = P256.KeyAgreement.PrivateKey()
return privateKey
}
func exportPrivateKey(_ privateKey: P256.KeyAgreement.PrivateKey) -> String {
let rawPrivateKey = privateKey.rawRepresentation
let privateKeyBase64 = rawPrivateKey.base64EncodedString()
let percentEncodedPrivateKey = privateKeyBase64.addingPercentEncoding(withAllowedCharacters: .alphanumerics)!
return percentEncodedPrivateKey
}
func importPrivateKey(_ privateKey: String) throws -> Curve25519.KeyAgreement.PrivateKey {
let privateKeyBase64 = privateKey.removingPercentEncoding!
let rawPrivateKey = Data(base64Encoded: privateKeyBase64)!
return try Curve25519.KeyAgreement.PrivateKey(rawRepresentation: rawPrivateKey)
}
func deriveSymmetricKey(privateKey: P256.KeyAgreement.PrivateKey, publicKey: P256.KeyAgreement.PublicKey) throws -> SymmetricKey {
let sharedSecret = try privateKey.sharedSecretFromKeyAgreement(with: publicKey)
let symmetricKey = sharedSecret.hkdfDerivedSymmetricKey(
using: SHA256.self,
salt: "My Key Agreement Salt".data(using: .utf8)!,
sharedInfo: Data(),
outputByteCount: 32
)
return symmetricKey
}
func encrypt(text: String, symmetricKey: SymmetricKey) throws -> String {
let textData = text.data(using: .utf8)!
let encrypted = try AES.GCM.seal(textData, using: symmetricKey)
return encrypted.combined!.base64EncodedString()
}
func decrypt(text: String, symmetricKey: SymmetricKey) -> String {
do {
guard let data = Data(base64Encoded: text) else {
return "Could not decode text: \(text)"
}
let sealedBox = try AES.GCM.SealedBox(combined: data)
let decryptedData = try AES.GCM.open(sealedBox, using: symmetricKey)
guard let text = String(data: decryptedData, encoding: .utf8) else {
return "Could not decode data: \(decryptedData)"
}
return text
}
catch let error {
return "Error decrypting message: \(error.localizedDescription)"
}
}
Как я могу сделать то же самое в Angular (10)? Я написал код, но, к сожалению, не добился успеха. вот мой код для того же в Angular.
import { Component } from '@angular/core';
import cryptokit from "cryptokit";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'MyEnc';
my_public_key = '';
other_public_key = '';
constructor() { }
async apps() {
const P256Password = "some long random string";
const P256Keys = await cryptokit.P256.generateKeys(P256Password);
console.log("P256 private key (encrypted)= " + P256Keys.privateKey);
console.log("P256 public key = " + P256Keys.publicKey);
}
}
и я получаю эту ошибку
ОШИБКА Ошибка: неперехвачено (в обещании): TypeError:crypto_1.generateKeyPair не является функцией