react-native-quick-crypto
Version:
A fast implementation of Node's `crypto` module written in C/C++ JSI
42 lines (36 loc) • 1.28 kB
text/typescript
import { NitroModules } from 'react-native-nitro-modules';
import { Buffer } from '@craftzdog/react-native-buffer';
import type { Certificate as NativeCertificate } from './specs/certificate.nitro';
import type { BinaryLike } from './utils';
import { binaryLikeToArrayBuffer } from './utils';
let native: NativeCertificate;
function getNative(): NativeCertificate {
if (native == null) {
native = NitroModules.createHybridObject<NativeCertificate>('Certificate');
}
return native;
}
function toArrayBuffer(
spkac: BinaryLike,
encoding?: BufferEncoding,
): ArrayBuffer {
if (typeof spkac === 'string') {
return binaryLikeToArrayBuffer(spkac, encoding || 'utf8');
}
return binaryLikeToArrayBuffer(spkac);
}
export class Certificate {
static exportChallenge(spkac: BinaryLike, encoding?: BufferEncoding): Buffer {
return Buffer.from(
getNative().exportChallenge(toArrayBuffer(spkac, encoding)),
);
}
static exportPublicKey(spkac: BinaryLike, encoding?: BufferEncoding): Buffer {
return Buffer.from(
getNative().exportPublicKey(toArrayBuffer(spkac, encoding)),
);
}
static verifySpkac(spkac: BinaryLike, encoding?: BufferEncoding): boolean {
return getNative().verifySpkac(toArrayBuffer(spkac, encoding));
}
}