Skip to content
This repository was archived by the owner on Jul 30, 2024. It is now read-only.

Commit 15471c1

Browse files
committed
[crypto] overhaul for node.js v16
1 parent a695ee1 commit 15471c1

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed

app/nodejs-v14/src/main/scala/io/scalajs/nodejs/crypto/Crypto.scala

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ package io.scalajs.nodejs.crypto
33
import com.thoughtworks.enableIf
44
import io.scalajs.nodejs.buffer.Buffer
55
import io.scalajs.nodejs.stream.{TransformOptions, WritableOptions}
6+
import io.scalajs.nodejs.v8.SharedArrayBuffer
7+
import io.scalajs.nodejs.Error
68
import net.exoego.scalajs.types.util.Factory
79

10+
import scala.scalajs
811
import scala.scalajs.js
912
import scala.scalajs.js.annotation.JSImport
13+
import scala.scalajs.js.typedarray.{ArrayBuffer, DataView, TypedArray}
1014
import scala.scalajs.js.|
1115

1216
/** The crypto module provides cryptographic functionality that includes a set of wrappers
@@ -173,6 +177,23 @@ trait Crypto extends js.Object {
173177
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs14)
174178
def diffieHellman(options: DiffieHellmanOptions): Buffer = js.native
175179

180+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
181+
def generateKey(`type`: String, options: GenerateKeyOptions, callback: Callback1[KeyObject]): Unit = js.native
182+
183+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
184+
def generateKeySync(`type`: String, options: GenerateKeyOptions): Unit = js.native
185+
186+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
187+
def generatePrime(size: String, options: GeneratePrimeOptions, callback: Callback1[ArrayBuffer | js.BigInt]): Unit =
188+
js.native
189+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
190+
def generatePrimeSync(size: String, options: GeneratePrimeOptions): ArrayBuffer | js.BigInt = js.native
191+
192+
def getCipherInfo(name: String): js.UndefOr[CipherInfo] = js.native
193+
def getCipherInfo(name: String, options: GetCipherInfoOptions): js.UndefOr[CipherInfo] = js.native
194+
def getCipherInfo(nid: Double): js.UndefOr[CipherInfo] = js.native
195+
def getCipherInfo(nid: Double, options: GetCipherInfoOptions): js.UndefOr[CipherInfo] = js.native
196+
176197
def generateKeyPair(
177198
`type`: String,
178199
options: GenerateKeyPairOptions,
@@ -319,6 +340,11 @@ trait Crypto extends js.Object {
319340
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs12)
320341
def randomInt(min: Int, max: Int, callback: Callback1[Int]): Unit = js.native
321342

343+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
344+
def randomUUID(options: RandomUUIDOptions): String = js.native
345+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
346+
def randomUUID(): String = js.native
347+
322348
def scrypt(password: String, salt: String, keylen: Int, options: ScryptOptions, callback: Callback1[Buffer]): Unit =
323349
js.native
324350
def scrypt(password: String,
@@ -401,6 +427,44 @@ trait Crypto extends js.Object {
401427
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs12) def verify(data: BufferLike,
402428
key: KeyObject
403429
): Boolean = js.native
430+
431+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
432+
def checkPrime(candidate: ArrayBuffer | SharedArrayBuffer | TypedArray[_, _] | Buffer | DataView | js.BigInt,
433+
options: CheckPrimeOptions,
434+
callback: Callback1[Boolean]
435+
): Unit = js.native
436+
437+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
438+
def checkPrimeSync(candidate: ArrayBuffer | SharedArrayBuffer | TypedArray[_, _] | Buffer | DataView | js.BigInt,
439+
options: CheckPrimeOptions
440+
): Boolean = js.native
441+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
442+
def checkPrimeSync(
443+
candidate: ArrayBuffer | SharedArrayBuffer | TypedArray[_, _] | Buffer | DataView | js.BigInt
444+
): Boolean = js.native
445+
446+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
447+
def hkdf(digest: String,
448+
key: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView | KeyObject,
449+
salt: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView,
450+
info: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView,
451+
keylen: Int,
452+
callback: Callback1[Buffer]
453+
): Unit = js.native
454+
455+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
456+
def hkdfSync(digest: String,
457+
key: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView | KeyObject,
458+
salt: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView,
459+
info: String | ArrayBuffer | Buffer | TypedArray[_, _] | DataView,
460+
keylen: Int
461+
): Buffer = js.native
462+
463+
@enableIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
464+
def secureHeapUsed(): HeapUsed = js.native
465+
466+
// TODO: Add when reached stable
467+
// webcrypto
404468
}
405469

406470
/** Crypto Singleton
@@ -509,6 +573,19 @@ trait CreatePublicKeyOptions extends js.Object {
509573
var `type`: js.UndefOr[String] = js.undefined
510574
}
511575

576+
@Factory
577+
trait GenerateKeyOptions extends js.Object {
578+
val length: Int
579+
}
580+
581+
@Factory
582+
trait GeneratePrimeOptions extends js.Object {
583+
var add: js.UndefOr[ArrayBuffer | SharedArrayBuffer | TypedArray[_, _] | Buffer | DataView | js.BigInt] = js.undefined
584+
var rem: js.UndefOr[ArrayBuffer | SharedArrayBuffer | TypedArray[_, _] | Buffer | DataView | js.BigInt] = js.undefined
585+
var safe: js.UndefOr[Boolean] = js.undefined
586+
var bigint: js.UndefOr[Boolean] = js.undefined
587+
}
588+
512589
@Factory
513590
trait GenerateKeyPairOptions extends js.Object {
514591
val modulusLength: Int
@@ -535,3 +612,35 @@ trait KeyPair extends js.Object {
535612
val publicKey: String | Buffer | KeyObject
536613
val privateKey: String | Buffer | KeyObject
537614
}
615+
616+
@Factory
617+
trait CheckPrimeOptions extends js.Object {
618+
var checks: js.UndefOr[Int] = js.undefined
619+
}
620+
621+
trait CipherInfo extends js.Object {
622+
var name: String
623+
var nid: Double
624+
var blockSize: Double
625+
var ivLength: Int
626+
var keyLength: Int
627+
var mode: String
628+
}
629+
630+
@Factory
631+
trait GetCipherInfoOptions extends js.Object {
632+
var keyLength: js.UndefOr[Int] = js.undefined
633+
var ivLength: js.UndefOr[Int] = js.undefined
634+
}
635+
636+
@Factory
637+
trait RandomUUIDOptions extends js.Object {
638+
var disableEntropyCache: js.UndefOr[Boolean] = js.undefined
639+
}
640+
641+
trait HeapUsed extends js.Object {
642+
var total: Double
643+
var min: Double
644+
var used: Double
645+
var utilization: Double
646+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.scalajs.nodejs.crypto
2+
3+
import com.thoughtworks.enableMembersIf
4+
import io.scalajs.nodejs.buffer.Buffer
5+
import io.scalajs.nodejs.tls.TLSCertificate
6+
import net.exoego.scalajs.types.util.Factory
7+
8+
import scala.scalajs.js
9+
import scala.scalajs.js.annotation.JSImport
10+
import scala.scalajs.js.typedarray.{DataView, TypedArray}
11+
import scala.scalajs.js.|
12+
13+
@JSImport("crypto", "X509Certificate")
14+
@enableMembersIf(io.scalajs.nodejs.internal.CompilerSwitches.gteNodeJs16)
15+
@js.native
16+
class X509Certificate private[this] () extends js.Object {
17+
def this(buffer: String | TypedArray[_, _] | Buffer | DataView) = this()
18+
19+
def ca: Boolean = js.native
20+
21+
def checkEmail(email: String, options: CheckOptions): js.UndefOr[String] = js.native
22+
def checkHost(host: String, options: CheckOptions): js.UndefOr[String] = js.native
23+
def checkIP(ip: String, options: CheckOptions): js.UndefOr[String] = js.native
24+
25+
def checkIssued(otherCert: X509Certificate): Boolean = js.native
26+
def checkPrivateKey(privateKey: KeyObject): Boolean = js.native
27+
28+
def fingerprint: String = js.native
29+
def fingerprint256: String = js.native
30+
31+
def infoAccess: String = js.native
32+
33+
def issuer: String = js.native
34+
def issuerCertificate: js.UndefOr[X509Certificate] = js.native
35+
36+
def keyUsage: js.Array[String] = js.native
37+
38+
def publicKey: KeyObject = js.native
39+
40+
def raw: Buffer = js.native
41+
42+
def serialNumber: String = js.native
43+
44+
def subject: String = js.native
45+
def subjectAltName: String = js.native
46+
47+
def toJSON(): String = js.native
48+
49+
def toLegacyObject(): TLSCertificate = js.native
50+
51+
def validFrom: String = js.native
52+
def validTo: String = js.native
53+
54+
def verify(publicKey: KeyObject): Boolean = js.native
55+
}
56+
57+
@Factory
58+
trait CheckOptions extends js.Object {
59+
var subject: js.UndefOr[String] = js.undefined
60+
var wildcards: js.UndefOr[Boolean] = js.undefined
61+
var partialWildcards: js.UndefOr[Boolean] = js.undefined
62+
var multiLabelWildcards: js.UndefOr[Boolean] = js.undefined
63+
var singleLabelSubdomains: js.UndefOr[Boolean] = js.undefined
64+
}

0 commit comments

Comments
 (0)