diff --git a/Cargo.toml b/Cargo.toml index ba70d50..1a9ac12 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,6 +12,7 @@ crate-type = ["cdylib"] [dependencies] napi = "2" napi-derive = "2" +stringprep = "0.1.4" [build-dependencies] napi-build = "2" diff --git a/index.d.ts b/index.d.ts index 479b3da..cccfc55 100644 --- a/index.d.ts +++ b/index.d.ts @@ -3,4 +3,6 @@ /* auto-generated by NAPI-RS */ -export function plus100(input: number): number +export function oidFromStr(s: string): Array | null +export function oidFromBytes(b: Uint8Array): Array | null +export function prepString(s: string, caseFold: boolean): string | null diff --git a/index.js b/index.js index 49aed9e..245ab9d 100644 --- a/index.js +++ b/index.js @@ -1,3 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +/* prettier-ignore */ + +/* auto-generated by NAPI-RS */ + const { existsSync, readFileSync } = require('fs') const { join } = require('path') @@ -8,217 +14,228 @@ let localFileExisted = false let loadError = null function isMusl() { - // For Node 10 - if (!process.report || typeof process.report.getReport !== 'function') { - try { - const lddPath = require('child_process').execSync('which ldd').toString().trim() - return readFileSync(lddPath, 'utf8').includes('musl') - } catch (e) { - return true - } - } else { - const { glibcVersionRuntime } = process.report.getReport().header - return !glibcVersionRuntime - } -} - -switch (platform) { - case 'android': - switch (arch) { - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'package-template.android-arm64.node')) + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { try { - if (localFileExisted) { - nativeBinding = require('./package-template.android-arm64.node') - } else { - nativeBinding = require('@napi-rs/package-template-android-arm64') - } + const lddPath = require('child_process').execSync('which ldd').toString().trim() + return readFileSync(lddPath, 'utf8').includes('musl') } catch (e) { - loadError = e + return true } - break - case 'arm': - localFileExisted = existsSync(join(__dirname, 'package-template.android-arm-eabi.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.android-arm-eabi.node') - } else { - nativeBinding = require('@napi-rs/package-template-android-arm-eabi') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on Android ${arch}`) + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime } - break - case 'win32': - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, 'package-template.win32-x64-msvc.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.win32-x64-msvc.node') - } else { - nativeBinding = require('@napi-rs/package-template-win32-x64-msvc') - } - } catch (e) { - loadError = e - } - break - case 'ia32': - localFileExisted = existsSync(join(__dirname, 'package-template.win32-ia32-msvc.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.win32-ia32-msvc.node') - } else { - nativeBinding = require('@napi-rs/package-template-win32-ia32-msvc') - } - } catch (e) { - loadError = e +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync(join(__dirname, 'x500-native.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.android-arm64.node') + } else { + nativeBinding = require('@wildboar/x500-native-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, 'x500-native.android-arm-eabi.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.android-arm-eabi.node') + } else { + nativeBinding = require('@wildboar/x500-native-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Android ${arch}`) } break - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'package-template.win32-arm64-msvc.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.win32-arm64-msvc.node') - } else { - nativeBinding = require('@napi-rs/package-template-win32-arm64-msvc') - } - } catch (e) { - loadError = e + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, 'x500-native.win32-x64-msvc.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.win32-x64-msvc.node') + } else { + nativeBinding = require('@wildboar/x500-native-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync(join(__dirname, 'x500-native.win32-ia32-msvc.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.win32-ia32-msvc.node') + } else { + nativeBinding = require('@wildboar/x500-native-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync(join(__dirname, 'x500-native.win32-arm64-msvc.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.win32-arm64-msvc.node') + } else { + nativeBinding = require('@wildboar/x500-native-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`) } break - default: - throw new Error(`Unsupported architecture on Windows: ${arch}`) - } - break - case 'darwin': - switch (arch) { - case 'x64': - localFileExisted = existsSync(join(__dirname, 'package-template.darwin-x64.node')) + case 'darwin': + localFileExisted = existsSync(join(__dirname, 'x500-native.darwin-universal.node')) try { - if (localFileExisted) { - nativeBinding = require('./package-template.darwin-x64.node') - } else { - nativeBinding = require('@napi-rs/package-template-darwin-x64') - } - } catch (e) { - loadError = e - } - break - case 'arm64': - localFileExisted = existsSync(join(__dirname, 'package-template.darwin-arm64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.darwin-arm64.node') - } else { - nativeBinding = require('@napi-rs/package-template-darwin-arm64') - } - } catch (e) { - loadError = e - } - break - default: - throw new Error(`Unsupported architecture on macOS: ${arch}`) - } - break - case 'freebsd': - if (arch !== 'x64') { - throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) - } - localFileExisted = existsSync(join(__dirname, 'package-template.freebsd-x64.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.freebsd-x64.node') - } else { - nativeBinding = require('@napi-rs/package-template-freebsd-x64') - } - } catch (e) { - loadError = e - } - break - case 'linux': - switch (arch) { - case 'x64': - if (isMusl()) { - localFileExisted = existsSync(join(__dirname, 'package-template.linux-x64-musl.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.linux-x64-musl.node') - } else { - nativeBinding = require('@napi-rs/package-template-linux-x64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync(join(__dirname, 'package-template.linux-x64-gnu.node')) - try { if (localFileExisted) { - nativeBinding = require('./package-template.linux-x64-gnu.node') + nativeBinding = require('./x500-native.darwin-universal.node') } else { - nativeBinding = require('@napi-rs/package-template-linux-x64-gnu') + nativeBinding = require('@wildboar/x500-native-darwin-universal') } - } catch (e) { - loadError = e - } + break + } catch {} + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, 'x500-native.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.darwin-x64.node') + } else { + nativeBinding = require('@wildboar/x500-native-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync(join(__dirname, 'x500-native.darwin-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.darwin-arm64.node') + } else { + nativeBinding = require('@wildboar/x500-native-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`) } break - case 'arm64': - if (isMusl()) { - localFileExisted = existsSync(join(__dirname, 'package-template.linux-arm64-musl.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.linux-arm64-musl.node') - } else { - nativeBinding = require('@napi-rs/package-template-linux-arm64-musl') - } - } catch (e) { - loadError = e - } - } else { - localFileExisted = existsSync(join(__dirname, 'package-template.linux-arm64-gnu.node')) - try { + case 'freebsd': + if (arch !== 'x64') { + throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } + localFileExisted = existsSync(join(__dirname, 'x500-native.freebsd-x64.node')) + try { if (localFileExisted) { - nativeBinding = require('./package-template.linux-arm64-gnu.node') + nativeBinding = require('./x500-native.freebsd-x64.node') } else { - nativeBinding = require('@napi-rs/package-template-linux-arm64-gnu') + nativeBinding = require('@wildboar/x500-native-freebsd-x64') } - } catch (e) { + } catch (e) { loadError = e - } } break - case 'arm': - localFileExisted = existsSync(join(__dirname, 'package-template.linux-arm-gnueabihf.node')) - try { - if (localFileExisted) { - nativeBinding = require('./package-template.linux-arm-gnueabihf.node') - } else { - nativeBinding = require('@napi-rs/package-template-linux-arm-gnueabihf') - } - } catch (e) { - loadError = e + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync(join(__dirname, 'x500-native.linux-x64-musl.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.linux-x64-musl.node') + } else { + nativeBinding = require('@wildboar/x500-native-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync(join(__dirname, 'x500-native.linux-x64-gnu.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.linux-x64-gnu.node') + } else { + nativeBinding = require('@wildboar/x500-native-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync(join(__dirname, 'x500-native.linux-arm64-musl.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.linux-arm64-musl.node') + } else { + nativeBinding = require('@wildboar/x500-native-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync(join(__dirname, 'x500-native.linux-arm64-gnu.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.linux-arm64-gnu.node') + } else { + nativeBinding = require('@wildboar/x500-native-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, 'x500-native.linux-arm-gnueabihf.node')) + try { + if (localFileExisted) { + nativeBinding = require('./x500-native.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('@wildboar/x500-native-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`) } break - default: - throw new Error(`Unsupported architecture on Linux: ${arch}`) - } - break - default: - throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) } if (!nativeBinding) { - if (loadError) { - throw loadError - } - throw new Error(`Failed to load native binding`) + if (loadError) { + throw loadError + } + throw new Error(`Failed to load native binding`) } -const { plus100 } = nativeBinding +const { oidFromStr, oidFromBytes, prepString } = nativeBinding -module.exports.plus100 = plus100 +module.exports.oidFromStr = oidFromStr +module.exports.oidFromBytes = oidFromBytes +module.exports.prepString = prepString diff --git a/src/lib.rs b/src/lib.rs index 4d9b54c..b7a7465 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ use napi_derive::napi; use napi::bindgen_prelude::*; +use stringprep::x520prep; #[napi] fn oid_from_str(s: String) -> Option> { @@ -42,3 +43,25 @@ fn oid_from_bytes(b: Uint8Array) -> Option> { } Some(nodes) } + +#[napi] +fn prep_string (s: String, case_fold: bool) -> Option { + match x520prep(&s, case_fold) { + Ok(p) => Some(s.to_owned()), + Err(_) => None, + } +} + +// #[napi] +// fn x520_prep_string_compare (a: &str, b: &str, ignore_case: bool) -> bool { +// // Waiting for the prepstring package to accept PR. +// let prepped_a = x520prep(a); +// let prepped_b = x520prep(b, case_fold); +// } + +// TODO: Native Teletex transcoding +// TODO: Native Hashmap / Hashset +// TODO: caseIgnoreMatch +// TODO: caseExactMatch +// TODO: numericStringMatch +// TODO: prepString