From 7506bd82e27fa3619ba4a4d22526235828332135 Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Mon, 10 Aug 2026 19:10:05 -0700 Subject: [PATCH 1/7] General crypto --- _data/cryptography.yml | 776 ++++++++++ _data/keys.yaml | 12 +- _packages/node/yarn.lock | 3023 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 3802 insertions(+), 9 deletions(-) create mode 100644 _data/cryptography.yml create mode 100644 _packages/node/yarn.lock diff --git a/_data/cryptography.yml b/_data/cryptography.yml new file mode 100644 index 00000000..0200dc28 --- /dev/null +++ b/_data/cryptography.yml @@ -0,0 +1,776 @@ +--- +auto_sort: false +credits: + - rickmark + - gemini + - https://safecurves.cr.yp.to +--- +types: + field: + description: A field is a set of numbers that can be added, subtracted, multiplied, and divided according + to certain rules. Typically defined as an Alban group. + parameters: + n: + aliases: + - size + type: positive_integer + description: The size of the field, which it the range for `X` where `X is a value between 0 and n-1 + variants: + prime: + description: !markdown > + A prime Galois field, denoted as $\mathbb{F}_p$ or GF(p), is a finite field with a prime number + p of elements, where arithmetic operations like addition and multiplication are performed modulo p. In the + PARI-GP computer algebra system, prime fields and elements within them are handled natively using integers + modulo p via or through finite field functions like . [1, 2, 3, 4, 5] + + # Core Properties of GF(p) + + • Elements: The field consists of integers $\{0, 1, 2, \dots, p-1\}$. + • Addition & Subtraction: Computed modulo p. + • Multiplication: Computed modulo p. + • Inverses: Every non-zero element has a unique multiplicative inverse because p is prime. [1, 5, 6] + + # Working with Prime Fields in GP/PARI + + • Integers modulo p: Use to perform basic arithmetic rings/fields. For instance, returns . + • Defining via : You can initialize a prime field element or generator using where p is prime. + • Polynomial roots (): Find roots of polynomials over a prime field by passing the prime p as a domain + argument, such as . [7, 8, 9] + + citations: + 1: ;ttps://www.youtube.com/watch?v=-WGc4VapKj0 + 2: https://www.johndcook.com/blog/finite-fields/ + 3: https://kconrad.math.uconn.edu/math5230f08/parirefcard.pdf + 4: https://pari.math.u-bordeaux.fr/dochtml/html/Arithmetic_functions.html + 5: https://www.youtube.com/watch?v=Sw8FH87J1XA + 6: https://medium.com/@dillihangrae/exploring-number-theory-galois-fields-d837a80f4fd1 + 7: https://pari.math.u-bordeaux.fr/Events/PARI2017c/talks/ecc_en.pdf + 8: https://pari.math.u-bordeaux.fr/dochtml/html-stable/Polynomials_and_power_series.html + 9: https://en.wikipedia.org/wiki/Finite_field_arithmetic + binary: + + point: + description: A point on a cartisian plane. This can be expressed typically as an ordered pair of integers, almost + always always `X` and `Y`. When used over a field, the values for `X` and `Y` are between 0 and n-1 and are + always positive. With elliptic curves, the values for `X` and `Y` are related, and therefore an alternate form + exists where the `X` is encoded and only if the `Y` is positive or negative is encoded. This is called + "point compression" but the value represened is still an X and a Y value. If the X and Y do not fall on the + curve, the compressed point is invalid. + parameters: + encoding: + type: enum + values: + uncompressed: + compressed_positive: + compressed_negative: + x: + type: positive_integer + y: + type: positive_integer + + prime: + description: A prime number. + positive_prime: + derived_from: positive_integer + positive_integer: + +algorithms: + rsa: + uses: + - signature + - encryption + parameters: [] + private_key: + p: + type: positive_prime + q: + type: positive_prime + public_key: + n: + type: positive_integer + derived: + description: The product of the two prime numbers p and q. + description: !markdown > + The RSA algorithm is a widely used method for secure data transmission. It is an asymmetric cryptographic + system, meaning it uses two different keys: a public key to lock or encrypt the data, and a matching private + key to unlock or decrypt it. [1, 2, 3] + + # How It Works + + The name RSA comes from its inventors: Ron Rivest, Adi Shamir, and Leonard Adleman. Its security relies + on a simple math rule: multiplying two large prime numbers is easy, but finding those original prime numbers + back from the final product is very hard. + + * Key Generation: The system picks two large prime numbers, multiplies them together, and uses the result to create a public key and a private key. + * Encryption: Anyone can use the receiver’s public key to turn a normal message into scrambled code (ciphertext). + * Decryption: Only the person with the secret private key can reverse the code and read the original message. [1, 5, 6] + + # Common Uses + + * Secure Web Traffic: Protecting data sent across HTTPS and SSL/TLS certificates. + * Digital Signatures: Proving that a message or software update really came from a trusted sender. + * Secure Logins: Used in protocols like SSH for remote computer access. [2, 3, 4, 7, 8] + citations: + 1: https://www.geeksforgeeks.org/computer-networks/rsa-algorithm-cryptography/ + 2: https://securew2.com/blog/what-is-rsa-asymmetric-encryption + 3: https://www.splunk.com/en_us/blog/learn/rsa-algorithm-cryptography.html + 4: https://www.encryptionconsulting.com/education-center/what-is-rsa/ + 5: https://www.youtube.com/watch?v=vf1z7GlG6Qo + 6: https://entro.security/glossary/rsa-encryption/ + 7: https://www.youtube.com/watch?v=Pq8gNbvfaoM + 8: https://www.cohesity.com/glossary/rsa-encryption/ + ecc: + uses: + - signature + - encryption + - key_derivation + parameters: + g: + type: point + description: The generator point `G` on the elliptic curve. This point is used to generate the private key. + private_key: + n: + type: positive_integer + description: A number whereby the parameter point `G` or the generator is multiplied by `n`. Point + multiplication is a process whereby a point on an elliptic curve is added to itself `n` times. The result + of `n` point additions is in and of itself a new point on the curve. + constraint: + - positive + - field + - curve + public_key: + p: + type: point + description: A point on the elliptic curve that is `G` times `n`. This point is in the field, on the curve, + and not the point at infinity. + description: !markdown > + Elliptic Curve Cryptography (ECC) is a public-key encryption approach based on the algebra of elliptic curves + over finite fields. It provides the same security as older methods like RSA but uses much smaller keys. This + makes it fast and efficient for phones, web pages, and crypto coins. [1, 2, 3, 4, 5] + + # How ECC Works + + * The Curve: Uses a math equation plotted on a grid that makes a symmetric loop shape. + * Generator Point: A specific starting point (G) on the curve agreed upon by both users. + * Private Key: A random number picked in secret by the user. + * Public Key: Found by adding the generator point to itself over and over using the private key number. + * One-Way Math: It is easy to multiply the points forward, but nearly impossible to guess the private key backwards (known as the Elliptic Curve Discrete Logarithm Problem). [4, 6, 7, 8, 9] + + # Key Benefits + + * Smaller Size: A 256-bit ECC key offers about the same security as a massive 3072-bit RSA key. + * Less Power: Uses less battery, memory, and CPU power on small hardware. + * Faster Speed: Sets up secure connections quicker than older systems. [5, 6, 10, 11] + + [1] https://www.ibm.com/docs/en/linux-on-systems?topic=apis-elliptic-curve-ecc-functions + [2] https://www.vmware.com/topics/elliptic-curve-cryptography + [3] https://www.hexnode.com/blogs/explained/what-is-elliptic-curve-cryptography-ecc/ + [4] https://cybertalents.com/blog/elliptic-curve-cryptography-ecc + [5] https://www.digicert.com/faq/cryptography/what-is-elliptic-curve-cryptography + [6] https://www.sectigo.com/blog/what-is-elliptic-curve-cryptography + [7] https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ + [8] https://www.ssldragon.com/blog/what-is-ecc-certificate/ + [9] https://www.expressvpn.com/glossary/elliptic-curve-cryptography/ + [10] https://www.keyfactor.com/blog/elliptic-curve-cryptography-what-is-it-how-does-it-work/ + [11] https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ + [12] https://nordvpn.com/blog/elliptic-curve-cryptography/ + [13] https://www.1kosmos.com/resources/security-glossary/elliptic-curve-cryptography + [14] https://www.twingate.com/blog/glossary/elliptic-curve-algorithm + + +key_derivation: + pkbdf2: + description: PKBDF2 (Password-Based Key Derivation Function 2) is a key derivation function that is designed to + be computationally intensive, making it suitable for deriving cryptographic keys from passwords. It is widely + used in various security protocols and applications to ensure that passwords are securely transformed into + keys, enhancing overall security. [1] +encryption: + des: + description: Data Encryption Standard + 3des: + description: Triple-DES + aes: + description: Advanced Encryption Standard + ecies: + description: Elliptic Curve Integrated Encryption Scheme + ecmqv: + description: Elliptic Curve MQV + rsa: + description: !markdown > + The RSA Cryptosystem is a public-key encryption method named after Ron Rivest, Adi Shamir, and Leonard Adleman. + It uses two mathematically linked keys: a public key to lock (encrypt) messages and a private key to unlock + (decrypt) them. Its security relies on the fact that multiplying large prime numbers is easy, but factoring + their product back is very hard. [1, 2, 3] + + # Key Generation + + * Pick two distinct, large prime numbers, p and q. + * Multiply them to find the modulus n = p × q. + * Compute Euler's totient function: φ(n) = (p - 1)(q - 1). + * Choose an integer e (the public exponent) such that 1 < e < φ(n) and e is coprime to φ(n). + * Calculate d (the private exponent) as the modular multiplicative inverse of e modulo φ(n), meaning $(d \times e) \pmod{\phi(n)} = 1$. + * Public Key: (n, e) (shared with everyone). + * Private Key: (n, d) (kept secret). [1, 4, 5] + + # Encryption + + * Turn your message into a number m, where 0 ≤ m < n. + * Compute the ciphertext c using the formula: $c = m^e \pmod{n}$. + * Send c to the receiver. [2, 5, 6, 7] + + # Decryption + + * Take the encrypted number c. + * Recover the original message m using the private key d: $m = c^d \pmod{n}$. [2, 5] + + citations: + 1: https://www.geeksforgeeks.org/computer-networks/rsa-algorithm-cryptography/ + 2: https://www.encryptionconsulting.com/education-center/what-is-rsa/ + 3: https://www.techtarget.com/cybersecurity/definition/What-is-the-RSA-algorithm + 4: https://www.youtube.com/watch?v=Pq8gNbvfaoM + 5: https://entro.security/glossary/rsa-encryption/ + 6: https://www.britannica.com/topic/RSA-encryption + 7: https://www.youtube.com/watch?v=qph77bTKJTM + + +signature: + dsa: + description: !markdown > + Digital Signature Algorithm (DSA) is a digital signature scheme that provides secure authentication and integrity + for digital messages and documents. It is based on the mathematical difficulty of the discrete logarithm problem. + DSA is widely used in various security protocols and applications, including secure communication, digital + signatures, and key exchange. [3] + ecdsa: + description: !markdown > + Elliptic Curve Digital Signature Algorithm (ECDSA) is a digital signature scheme that uses elliptic curve + cryptography. It provides secure authentication and integrity for digital messages and documents. ECDSA is + widely used in various security protocols and applications, including secure communication, digital signatures, + and key exchange. [6] + rsa: + description: !markdown > + The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] + Key Pair Components + + • Public Key: Consists of the modulus n and the public exponent e, used to verify signatures. + • Private Key: Consists of the modulus n and the private exponent d, kept secret and used to generate signatures. [2, 5] + + Signature Generation (Signing) + + • Compute the hash value of the message: h = hash(msg). + • Raise the hash to the power of the private exponent d modulo n to create the signature: $s = h^d \pmod n$. + • Send the signature along with the original message. [2, 4, 6] + + Signature Verification + + • Compute the hash value of the received message: h = hash(msg). + • Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. + • Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] + + Would you like to explore how RSA key generation works mathematically or compare it with ECDSA? + AI responses may include mistakes. + + [1] https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ + [2] https://cryptobook.nakov.com/digital-signatures/rsa-signatures + [3] https://www.encryptionconsulting.com/education-center/what-is-rsa/ + [4] https://www.youtube.com/watch?v=TeuKV5kHLyQ + [5] https://en.wikipedia.org/wiki/RSA_cryptosystem + [6] https://securew2.com/blog/what-is-rsa-asymmetric-encryption + [7] https://cryptobook.nakov.com/digital-signatures/rsa-signatures + [8] https://students.cs.byu.edu/~cs465ta/lectures/rsa_notes.pdf + + +agreement: + dh: + description: !markdown > + Diffie-Hellman (DH) is a key exchange protocol that allows two parties to securely establish a shared secret + over an insecure communication channel. It relies on the mathematical difficulty of the discrete logarithm + problem. DH is widely used in various security protocols and applications, including secure communication, + key exchange, and digital signatures. [3] + ecdh: + description: !markdown > + Elliptic Curve Diffie-Hellman (ECDH) is a key exchange protocol that allows two parties to securely establish + a shared secret over an insecure communication channel. It is based on the mathematical difficulty of the + elliptic curve discrete logarithm problem. ECDH is widely used in various security protocols and applications, + including secure communication, key exchange, and digital signatures. [4] + ecdhe: + description: !markdown > + Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) is a key exchange protocol that allows two parties to securely + establish a shared secret over an insecure communication channel. It is based on the mathematical difficulty + of the elliptic curve discrete logarithm problem. ECDHE is widely used in various security protocols and + applications, including secure communication, key exchange, and digital signatures. [5] +hash_algorithms: + md5: + description: MD5 is a widely used cryptographic hash function that produces a 128-bit (16-byte) hash value. + lengths: + - 128 + insecure: true + sha0: + description: SHA-0 is the original 160-bit cryptographic hash function published in 1993 by NIST as "SHA". It + was withdrawn and replaced by SHA-1 shortly after publication in 1995 due to an undisclosed flaw, making it + obsolete and insecure for modern use. + lengths: + - 160 + insecure: true + sha1: + vulnerabilities: + - Cryptographic Collisions + - Length Extension Attacks + construction: merkle–damgard + recommended: false + efficacy: Exceptionally efficient on standard CPUs, which commonly feature optimized implementations + description: !markdown > + SHA-1 hash is a 160-bit cryptographic checksum rendered as a 40-character hexadecimal string. + Designed by the NSA, it converts any input data into a unique digital fingerprint. It is now considered + cryptographically broken and insecure against collision attacks, meaning modern systems use SHA-256 + instead. [1, 2, 3, 4] + + ## Key Characteristics + + * Fixed Output: Always produces 160 bits (40 hex characters) regardless of input size. + * One-Way Function: Cannot be reversed to reveal the original input data. + * Avalanche Effect: Changing even a single character drastically changes the final hash output. [2, 3, 5, 6] + + ## Security Status and Deprecation + + * Cryptographic Collisions: Researchers successfully demonstrated practical collision attacks (finding two + different inputs with the same hash). [4, 7] + * Current Usage: Phased out of digital signatures, SSL certificates, and secure software repositories. [1, 4, 7] + * Legacy Compatibility: Retained mostly for older version control systems (like checking file identifiers in + Git) and non-adversarial checksum verifications. [5, 7] + citations: + 1: [https://securew2.com](https://securew2.com/blog/what-is-sha-encryption-sha-256-vs-sha-1) + 2: [https://en.wikipedia.org](https://en.wikipedia.org/wiki/SHA-1) + 3: [https://md5decrypt.net](https://md5decrypt.net/en/Sha1/) + 4: [https://www.geeksforgeeks.org](https://www.geeksforgeeks.org/java/sha-1-hash-in-java/) + 5: [https://www.youtube.com](https://www.youtube.com/watch?v=kmHojGMUn0Q&t=1) + 6: [https://www.youtube.com](https://www.youtube.com/watch?v=DMtFhACPnTY) + 7: [https://emn178.github.io](https://emn178.github.io/online-tools/sha1.html) + lengths: + - 160 + sha2: + status: common-usage + construction: merkle–damgard + recommended: true + vulnerabilities: + - Length Extension Attacks + efficacy: Exceptionally efficient on standard CPUs, which commonly feature optimized implementations + description: !markdown > + SHA-2 (Secure Hash Algorithm 2) is a set of cryptographic hash functions designed by the NSA. It turns data of + any size into a fixed-length text or number string (a "hash"). Common types include SHA-256 and SHA-512, which + are used to keep data safe and check file integrity. [1, 2, 3, 4] + + ## Key Features + + * One-Way: You cannot turn a hash back into the original data. + * Unique: Even a tiny change in the input changes the whole hash. + * Secure: It replaced older, broken hashes like SHA-1 and MD5. [1, 4, 5] + + ## Main Types + + * SHA-256: Uses 256 bits; the most common choice for web security and digital signatures. + * SHA-512: Uses 512 bits; faster on 64-bit systems and offers higher security levels. + * SHA-224 & SHA-384: Truncated or modified versions for specific size needs. [1, 4, 5, 6, 7] + citations: + 1: [https://emn178.github.io](https://emn178.github.io/online-tools/sha256.html) + 2: [https://en.wikipedia.org](https://en.wikipedia.org/wiki/SHA-2) + 3: [https://docs.aws.amazon.com](https://docs.aws.amazon.com/clean-rooms/latest/sql-reference/s_SHA2.html) + 4: [https://shop.trustico.com](https://shop.trustico.com/blogs/stories/sha-1-vs-sha-2-and-other-hashing-algorithms) + 5: [https://www.youtube.com](https://www.youtube.com/watch?v=QZY3IjFBtFY) + 6: [https://www.sectigo.com](https://www.sectigo.com/blog/what-is-sha-encryption) + 7: [https://xilinx.github.io](https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/sha2.html) + +sha3: + status: future-proofing + construction: sponge + recommended: true + efficacy: Exceptionally efficient on customized ASICs/FPGAs, currently lacks broad support on standard CPUs + description: !markdown > + SHA-3 (Secure Hash Algorithm 3) is the latest cryptographic hash standard released by the National Institute of + Standards and Technology (NIST). It converts any input data into a unique, fixed-length digital fingerprint + called a hash. [1, 2, 3] + + Unlike earlier algorithms like SHA-1 and SHA-2, which rely on the Merkle–Damgård structure, SHA-3 is built on a + completely different design called Keccak and utilizes a unique sponge construction. This fundamental structural + difference ensures that if a theoretical vulnerability is ever discovered in SHA-2, SHA-3 will remain entirely + unaffected as a secure backup. [2, 3, 4] + + ## Standard SHA-3 Variants + + According to the [NIST FIPS 202 Publication](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.202.pdf), the + SHA-3 family is officially split into four fixed-length hash functions and two flexible Extendable-Output + Functions (XOFs): [5, 6, 7] + + ### SHAKE128 & SHAKE256 + + XOF variants that can squeeze out a hash of any requested bit length. [8, 9, 10] + + ## How the "Sponge" Works + + The algorithm processes data in two distinct phases: [2, 11, 12] + + 1. Absorbing Phase: The input data is split into blocks, XORed into the internal state matrix, and thoroughly + mixed using a 1600-bit permutation function called Keccak-p. [2, 13] + 2. Squeezing Phase: The internal data state continues to permute while the desired number of output bits are + read out to form the final secure hash. [2, 10] + + If you are writing software, you can test hashing functions locally using free browser environments + like the [Codeshack SHA-3 Generator](https://codeshack.io/sha3-hash-generator/) or the Emn178 GitHub + Page. [4, 14, 15, 16, 17] + citations: + 1: [https://en.wikipedia.org](https://en.wikipedia.org/wiki/SHA-3) + 2: [https://www.youtube.com](https://www.youtube.com/watch?v=fzlflyw7X2I&t=91) + 3: [https://rublon.com](https://rublon.com/blog/sha-3-vs-sha-2-vs-sha-1-vs-md5/) + 4: [https://codeshack.io](https://codeshack.io/sha3-hash-generator/) + 5: [https://nvlpubs.nist.gov](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.202.pdf) + 6: [https://nvlpubs.nist.gov](https://nvlpubs.nist.gov/nistpubs/specialpublications/nist.sp.800-185.pdf) + 7: [https://shattered.io](https://shattered.io/sha-256-vs-sha3-256/) + 8: [https://xilinx.github.io](https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/sha3.html) + 9: [https://www.analog.com](https://www.analog.com/en/resources/technical-articles/back-to-basics-secure-hash-algorithms.html) + 10: [https://www.youtube.com](https://www.youtube.com/watch?v=bTOJ9An9wpE&t=214) + 11: [https://ieeexplore.ieee.org](https://ieeexplore.ieee.org/iel7/8334884/8350884/08351649.pdf) + 12: [https://www.intel.cn](https://www.intel.cn/content/www/cn/zh/developer/articles/technical/intel-sha-extensions.html) + 13: [https://www.nist.gov](https://www.nist.gov/publications/sha-3-standard-permutation-based-hash-and-extendable-output-functions) + 14: [https://emn178.github.io](https://emn178.github.io/online-tools/sha3_256.html) + 15: [https://www.devity.in](https://www.devity.in/tools/hash-generator/) + 16: [https://domainscan.in](https://domainscan.in/dev/generate-hash) + 17: [https://security.stackexchange.com](https://security.stackexchange.com/questions/16332/are-online-hash-calculators-dangerous) +block_cypher_modes: + ecb: + description: !markdown > + Electronic Codebook (ECB) mode is the simplest and most basic block cipher mode of operation. It splits a message into fixed-size blocks and encrypts each block independently using the same secret key. Identical plaintext blocks always yield identical ciphertext blocks, making it insecure for most uses. [1, 2, 3, 4] + How ECB Works + + • Splitting: Data is cut into equal chunks matching the block size (such as 16 bytes for AES). + • Independent Encryption: Each block is processed through the cipher separately without interaction from other blocks. + • Independent Decryption: Cipher blocks are decrypted individually back to text using the same key. [3, 4, 5] + + Advantages + + • Simplicity: Very easy to program and use. + • Parallel Processing: Blocks encrypt or decrypt simultaneously [0.12], saving time on multi-core systems. [4] + + Security Weaknesses + + • Pattern Leakage: Identical inputs create identical outputs, meaning visual shapes or data trends remain visible (famous for the "Tux the Penguin" encrypted image demonstration). + • No Hiding of Data: An attacker can swap, delete, or replay blocks [0.13] without detection. Most experts advise against using ECB for private or sensitive data. [2, 4] + + If you want, I can explain:Cipher Block Chaining (CBC) as a secure alternativePadding methods used when data does not fit the block size evenly + AI responses may include mistakes. + + [1] https://www.geeksforgeeks.org/computer-networks/electronic-code-book-ecb-in-cryptography/ + [2] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation + [3] https://destcert.com/resources/types-of-ciphers/ + [4] https://medium.com/@brsdncr/cryptography-lesson-notebook-1-aes-ecb-electronic-codebook-5baabcedfa59 + [5] https://www.youtube.com/watch?v=jDnenb9EHQk + cbc: + description: !markdown > + Cipher Block Chaining (CBC) is a mode of operation for block ciphers where each plaintext block is combined with the previous ciphertext block using an exclusive-OR (XOR) operation before being encrypted. This chaining process ensures that identical plaintext blocks yield entirely different ciphertext outputs. [1, 2, 3] + How CBC Encryption Works + + • Initialization Vector (IV): Because there is no previous ciphertext for the first plaintext block, a unique or random value called an IV is XORed with the first block. + • Chaining: For every subsequent block, the current plaintext block is XORed with the ciphertext output of the immediately preceding block. + • Encryption: The combined result of the XOR operation is then passed through the block cipher algorithm using the secret key. + • Sequential processing: Encryption must be performed strictly in sequence (serially) because block N cannot be encrypted until block N-1 finishes. [3, 4, 5] + + How CBC Decryption Works + + • Reverse process: The cipher takes a ciphertext block, runs it through the block cipher decryption function, and then XORs the result with the previous ciphertext block (or the IV for the first block) to recover the original plaintext. + • Parallel decryption: Unlike encryption, decryption can be done in parallel because all ciphertext blocks are already available. [3, 6] + + Key Pros and Cons + + • Pros: Hides patterns and prevents repetitive plaintext leaks (unlike basic ECB mode); highly secure when paired with a proper, unpredictable IV. + • Cons: Slower due to its sequential nature during encryption; prone to error propagation (a corrupted ciphertext block corrupts its own block decryption and distorts the next plaintext block). [5, 8, 9] + + If you'd like, I can explain:How the Initialization Vector (IV) must be managed securelyHow CBC compares to Counter (CTR) or Galois/Counter Mode (GCM)How padding is handled via PKCS#7Let me know what you want to explore next! + AI responses may include mistakes. + + [1] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ + [2] https://www.portnox.com/cybersecurity-101/general-security/what-is-cipher-block-chaining/ + [3] https://www.sciencedirect.com/topics/computer-science/cipher-block-chaining + [4] https://datatracker.ietf.org/doc/html/rfc2451 + [5] https://www.youtube.com/watch?v=SV2qsNfI1Cs + [6] https://www.sciencedirect.com/topics/mathematics/block-cipher + [7] https://www.youtube.com/watch?v=NnLLkmgBhCY + [8] https://www.sciencedirect.com/topics/mathematics/cipher-block-chaining + [9] https://destcert.com/resources/types-of-ciphers/ + cfb: + + + ofb: + description: !markdown > + Output Feedback (OFB) mode turns a block cipher into a synchronous stream cipher. It encrypts an Initialization Vector (IV) and feeds that cipher output back into the next encryption round. This produces a keystream that is XORed with the plaintext to create the ciphertext. [1, 2, 3, 4] + How OFB Mode Works + + • Keystream Generation: The cipher encrypts an IV to create the first output block. It feeds that output back into the cipher again to create the next block, repeating this process to form a continuous keystream. + • Encryption: The system XORs the generated keystream blocks with the plaintext blocks to produce the final ciphertext. + • Decryption: Decryption uses the exact same steps. It generates the identical keystream by encrypting the IV and XORs it with the ciphertext to recover the original plaintext. [4] + + Key Features and Properties + + • No Error Propagation: A bit error in the ciphertext only affects the single corresponding bit in the decrypted plaintext, rather than corrupting later blocks. + • Preprocessing: The system can generate the entire keystream before the plaintext is even available, speeding up real-time processing. + • No Parallel Encryption: Because each keystream block depends strictly on the output of the previous block, you cannot encrypt multiple blocks at the same time. + • IV Uniqueness: Reusing the same IV and secret key combination completely destroys security by repeating the exact same keystream. [7] + + If you would like, I can compare OFB mode with CFB (Cipher Feedback) or CTR (Counter) mode to show how their feedback and performance differ. + AI responses may include mistakes. + + [1] https://www.youtube.com/watch?v=gIzFAFo5a6M + [2] https://www.youtube.com/watch?v=Q_hi2jWg6dc + [3] https://destcert.com/resources/types-of-ciphers/ + [4] https://www.youtube.com/watch?v=OGdBTfouuao + [5] https://www.tutorialspoint.com/cryptography/output_feedback_mode.htm + [6] https://crypto.stackexchange.com/questions/25961/operation-modes-of-block-ciphers-how-are-used + [7] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ + + + ifb: + description: !markdown > + It appears IFB is not a standard or widely recognized block cipher mode of operation (such as CBC, CFB, OFB, or CTR). You might have meant CFB (Cipher Feedback), OFB (Output Feedback), or perhaps a typo for an internal feedback mechanism in a specific custom stream/block design. [1, 2, 3] + Standard feedback-based modes include: + Cipher Feedback (CFB) Mode + + • Function: Turns a block cipher into a self-synchronizing stream cipher. + • Mechanism: Encrypts the previous ciphertext block, then XORs the output with the current plaintext block to produce the new ciphertext. + • Use Case: Good for streaming data where synchronization or byte-by-byte processing is needed. [1, 4] + + Output Feedback (OFB) Mode + + • Function: Turns a block cipher into a synchronous stream cipher. + • Mechanism: Repeatedly encrypts the initialization vector (IV) or previous cipher output rather than the ciphertext, generating a independent keystream to XOR with the plaintext. + • Use Case: Helpful when transmission errors are common, because errors do not propagate to future blocks. [1, 2, 5, 6] + + Did you mean CFB or OFB, or are you referring to a specific protocol or paper that defines IFB? Let me know so I can give you the exact details you need. + AI responses may include mistakes. + + [1] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ + [2] https://www.youtube.com/watch?v=gIzFAFo5a6M + [3] https://groups.google.com/g/sci.crypt.research/c/ZD82NIacVmU/m/WDYm8_xmzTQJ + [4] https://thorteaches.com/glossary/cipher-feedback-cfb-mode/ + [5] https://crypto.stackexchange.com/questions/98347/is-ofb-mode-a-stream-cipher + [6] https://www.researchgate.net/figure/CFB-Cipher-Feedback-mode-Output-Feedback-OFB-mode-Like-CFB-mode-output-feedback_fig3_273260684 + ctr: + description: !markdown > + Counter (CTR) mode is a block cipher mode of operation that turns a standard block cipher (like AES) into a stream cipher. It works by encrypting a sequential counter value combined with a unique nonce, then XORing the resulting keystream block with the plaintext to generate the ciphertext. [1, 2, 3] + How CTR Mode Works + + • Nonce and Counter: Each block uses a unique counter block made by joining a fixed nonce and an incrementing number. + • Keystream Generation: The block cipher encrypts each counter block using the secret key to create a unique keystream segment. + • XOR Operation: The plaintext is XORed with this encrypted keystream to produce the ciphertext. + • Decryption Simplicity: Decryption uses the exact same process; the counter blocks are encrypted again and XORed with the ciphertext to recover the original plaintext. [1, 2, 3, 4] + + Key Characteristics + + • Parallel Processing: Both encryption and decryption can be run in parallel across multiple blocks because the counter values are known in advance. + • No Padding Needed: Because it acts like a stream cipher, the final block does not need to be padded to a full block size. + • Random Access: You can jump directly to decrypt any specific block without processing the blocks that come before it. + • Nonce Reuse Risk: Reusing the same nonce and key combination completely destroys the security of the cipher, allowing attackers to recover the keystream. [2, 4, 7] + + If you'd like, I can:Compare CTR mode vs. CBC modeExplain Galois/Counter Mode (GCM) for authenticationShow how the nonce and counter blocks are structured internallyLet me know how you want to proceed. + AI responses may include mistakes. + + [1] https://www.hexnode.com/blogs/explained/what-is-counter-mode-ctr/ + [2] https://www.youtube.com/watch?v=zX0PZtqerCI + [3] https://pycryptodome.readthedocs.io/en/v3.20.0/src/cipher/classic.html + [4] https://ctf101.org/cryptography/what-are-block-ciphers/ + [5] https://www.tutorialspoint.com/cryptography/counter_mode.htm + [6] https://www.youtube.com/watch?v=gUNyXs6mEKM + [7] https://medium.com/@malkhoori/aes-gcm-nonce-reuse-writeup-7d5a92b599cb + gcm: + description: !markdown > + Galois/Counter Mode (GCM) is an authenticated encryption mode for block ciphers. It provides both data confidentiality (secrecy) and authenticity (integrity). GCM combines Counter (CTR) mode for encryption with a special GHASH function based on Galois field multiplication for integrity verification. [1, 2, 3, 4] + Key Components and Operation + + • Counter Mode (Encryption): Turns a block cipher into a stream cipher by encrypting sequential counter values and XORing the output with plaintext blocks. + • GHASH (Authentication): Processes the ciphertext, optional additional authenticated data (AAD), and length fields using universal hashing over a binary Galois field (GF(2¹²⁸)) to output a unique authentication tag. + • Nonce / IV: Requires a unique initialization vector (typically 96 bits) for every execution under the same key. Never reuse a nonce. [1, 3, 6] + + Advantages of GCM + + • High Speed: Supports parallel processing for both encryption and authentication, making it optimal for high-bandwidth networks. + • Single-Pass Efficiency: Computes privacy and integrity checks simultaneously rather than sequentially. + • Standard Adoption: Widely used in modern protocols like TLS 1.2+, IPsec, and SSH due to its security and performance. [4, 8, 9, 10, 11] + + If you'd like, I can:Detail how to prevent nonce reuse vulnerabilitiesCompare GCM with CCM or ChaCha20-Poly1305 modesShow a basic code implementation overviewLet me know how you would like to proceed. + AI responses may include mistakes. + + [1] https://www.ibm.com/docs/en/linux-on-systems?topic=mo-electronic-code-book-ecb-mode + [2] https://www.intel.com/content/www/us/en/content-details/783641/advanced-encryption-standard-galois-counter-mode-optimized-ghash-function-technology-guide.html + [3] https://www.youtube.com/watch?v=-fpVv_T4xwA + [4] https://www.cincopa.com/learn/introduction-to-aes-gcm-mode-and-its-advantages + [5] https://medium.com/@pravallikayakkala123/understanding-aes-encryption-and-aes-gcm-mode-an-in-depth-exploration-using-java-e03be85a3faa + [6] https://www.youtube.com/watch?v=C_cQIYPWTXs + [7] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/gcm.html + [8] https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf + [9] https://www.youtube.com/watch?v=gUNyXs6mEKM + [10] https://datatracker.ietf.org/doc/html/rfc5647 + [11] https://crypto.stackexchange.com/questions/2310/what-is-the-difference-between-cbc-and-gcm-mode + lrw: + xcb: + hctr: + hctr2: + hsbh: + essiv: + kw: + kwp: + + ccm: + description: !markdown > + CCM (Counter with CBC-MAC) is an authenticated encryption mode for 128-bit block ciphers like AES. It provides both data confidentiality (encryption) and authenticity (integrity tag) in one operation. It combines Counter (CTR) mode for encryption and Cipher Block Chaining Message Authentication Code (CBC-MAC) for integrity. [1, 2, 3, 4, 5] + How CCM Works + + • Two Core Parts: Uses CTR mode to encrypt the data and CBC-MAC to generate a security tag. + • Associated Data (AD): Can authenticate extra unencrypted data (like packet headers or IP addresses). + • Nonce Requirement: Requires a unique nonce (number used once) for every message under the same key to remain secure. Reusing a nonce breaks confidentiality entirely. [1, 2, 6] + + Key Properties + + • Block Size: Strictly defined for 128-bit block ciphers (such as AES-128). + • Order of Operation: Standard implementations compute the MAC over the associated data and plaintext first, then encrypt both the message and the tag using CTR mode. + • Common Uses: Widely used in constrained wireless networks, including IEEE 802.11i (Wi-Fi security), Bluetooth Low Energy, and ZigBee. [1, 2, 3, 6, 7] + + If you'd like, I can:Compare CCM with GCM (Galois/Counter Mode)Detail the exact step-by-step mathematical blocksExplain how to pick nonce and tag sizesLet me know what you want to explore next! + AI responses may include mistakes. + + [1] https://en.wikipedia.org/wiki/CCM_mode + [2] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/ccm.html + [3] https://docs.nordicsemi.com/r/bundle/ps_nrf5340/page/ccm.html + [4] https://datatracker.ietf.org/doc/html/rfc3610 + [5] https://csrc.nist.gov/pubs/sp/800/38/c/upd1/final + [6] https://www.cryptopp.com/wiki/CCM_Mode + [7] https://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/IPCore/HelionTechCores/AESCCMCore + + + xts: + description: !markdown > + XTS (XEX-based tweaked-codebook mode with ciphertext stealing) is a block cipher mode designed specifically for full-disk and storage encryption. It secures data at rest by using two keys and a "tweak" value (like a sector number) so identical data blocks yield different ciphertexts, without expanding file sizes. [1, 2, 3] + Key Features of XTS + + • Two Keys: It uses two independent cipher keys—one for the core block encryption and one to encrypt the tweak value. + • The Tweak: It uses a tweak value (position/sector ID) modified via Galois field math. This stops attackers from spotting patterns in identical blocks across different disk sectors. + • No Size Expansion: It uses ciphertext stealing to handle final partial blocks. This avoids padding, meaning the encrypted data matches the exact size of the original data. + • Confidentiality Only: It provides strong data privacy, but it does not offer built-in authentication or tamper detection. [3, 4] + + Common Uses + + • Full-Disk Encryption: Used by software like VeraCrypt and BitLocker. + • Hardware Drives: Used inside secure external SSDs and USB flash drives like the Kingston IronKey. [2, 4, 5, 8, 9] + + If you'd like, I can explain:How ciphertext stealing works mathematicallyA comparison between XTS and CBC or GCM modesPotential security limitations of XTSLet me know what you want to explore next. + AI responses may include mistakes. + + [1] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/xts.html + [2] https://www.securview.com/ai-security-essentials/xts-mode + [3] https://www.cryptopp.com/wiki/XTS_Mode + [4] https://veracrypt.io/en/Modes%20of%20Operation.html + [5] https://www.kingston.com/unitedkingdom/en/blog/data-security/xts-encryption + [6] https://www.computer.org/csdl/magazine/sp/2010/03/msp2010030068/13rRUxNW1XJ + [7] https://xilinx.github.io/Vitis_Libraries/security/2021.2/guide_L1/internals/xts.html + [8] https://www.kingston.com/en/blog/data-security/xts-encryption + [9] https://terrazone.io/aes-256-encryption-types/ + eme: + eax: + + xex: + description: !markdown > + XEX (XOR-Encrypt-XOR) is a tweakable block cipher mode designed by Phillip Rogaway. It masks a plaintext block with a tweak value before and after block cipher encryption. XEX serves as the foundational core for XTS-AES, the standard mode used for secure storage and full-disk encryption. [1, 2, 3, 4, 5, 6] + How XEX Works + + • Pre-whitening: The plaintext block is XORed with a masked tweak value (derived from a secondary key and a sector/block index). + • Encryption: The resulting value passes through the standard block cipher function (like AES) using the primary key. + • Post-whitening: The cipher output is XORed again with the same masked tweak value to produce the final ciphertext. + • Tweak evolution: Tweak values across adjacent blocks are modified by multiplying the previous tweak by a primitive element in a finite Galois Field (GF(2¹²⁸)). [3, 6, 7, 8, 9] + + Key Characteristics + + • Tweakable security: Ensures that identical plaintext blocks encrypt to different ciphertexts when located at different storage addresses or sector numbers. + • Parallelizable: Individual blocks can be encrypted or decrypted independently, allowing high performance on modern hardware. + • No authentication: Provides confidentiality for data at rest but does not protect against data tampering or active manipulation. [9, 10, 11, 12, 13] + + If you are planning an implementation, would you like to explore how XEX transitions into XTS mode with ciphertext stealing, or do you need help with performance considerations for disk encryption? + AI responses may include mistakes. + + [1] https://csrc.nist.gov/projects/block-cipher-techniques/BCM + [2] https://web.cs.ucdavis.edu/~rogaway/papers/modes.pdf + [3] https://www.truecrypt.org/docs/modes-of-operation + [4] https://eprint.iacr.org/2015/1049.pdf + [5] https://en.wikipedia.org/wiki/Xor%E2%80%93encrypt%E2%80%93xor + [6] https://onlinedocs.microchip.com/oxy/GUID-4D282FC5-82FC-4934-8BAD-D4A5D8422E6C-en-US-7/GUID-3B9716A2-235B-4606-9FA3-559A7958BC36.html + [7] https://fiveable.me/lists/block-cipher-modes-of-operation + [8] https://www.sciencedirect.com/topics/computer-science/block-cipher-mode + [9] https://www.securview.com/ai-security-essentials/xts-aes + [10] https://www.youtube.com/watch?v=gUNyXs6mEKM + [11] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation + [12] https://dl.acm.org/doi/10.1145/937527.937529 + [13] https://www.ibm.com/docs/en/linux-on-systems?topic=planning-cipher-mode-considerations + + +elliptic_curve: + anomalous: + safe: false + m-221: + safe: true + e-222: + safe: true + nist-secp224r1: + safe: false + curve25519: + safe: true + curve1174: + safe: true + field: prime + description: !markdown > + Curve1174 is a specific twisted Edwards elliptic curve used in elliptic-curve cryptography. It is defined over a + prime field and engineered to allow fast, secure, and unified point addition without exceptional cases, helping + developers build simple and side-channel-resistant cryptographic operations. [1, 2, 3, 4, 5] + Key Properties of Curve1174 + + • Form: Twisted Edwards curve equation x² + y² = 1 + d x² y² + • Parameter: Uses a specific non-square parameter d linked to the value 1174 modulo its prime. + • Purpose: Designed alongside curves like Curve25519 to provide high-security general-purpose cryptographic + protocols and efficient scalar multiplication. [3, 4, 6, 7] + citations: + 1: https://datatracker.ietf.org/doc/html/draft-josefsson-tls-additional-curves-01 + 2: https://www.johndcook.com/blog/2019/02/19/addition-on-curve1174/ + 3: https://www.johndcook.com/blog/2019/02/15/elliptic-curve-names/ + 4: https://eprint.iacr.org/2013/647.pdf + 5: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography + 6: https://safecurves.cr.yp.to/ind.html + 7: https://eprint.iacr.org/2013/647.pdf + bn254: + aliases: + - bn256 + - bn128 + - alt-bn128 + field: prime + libraries: + - ark_bn254 + uses: + - ethereum + - zk-snark + description: !markdown > + The BN(2,254) curve—widely known as BN254, BN256, or bn128—is a pairing-friendly elliptic curve in the + Barreto-Naehrig family defined over a 254-bit prime field. It is heavily used in zero-knowledge proofs and + blockchain protocols (such as Ethereum and Zcash) due to its efficient pairing operations. [1, 2, 3, 4] + + # Core Properties + + • Family: Barreto-Naehrig (BN) with an embedding degree of 12 + • Field size: Defined over a 254-bit prime scalar/base field + • Alternative names: , , + • Security level: Originally thought to offer roughly 128-bit security, but adjusted down to roughly 100-bit + security following advanced discrete logarithm attacks (Kim-Barbulescu algorithm). [1, 2, 3] + citations: + 1: https://github.com/nthparty/mclbn256 + 2: https://docs.rs/ark-bn254/latest/ark_bn254/ + 3: https://github.com/sedaprotocol/bn254 + 4: https://hackmd.io/@jpw/bn254 + 5: https://docs.rs/bn254/ + 6: https://billatnapier.medium.com/baby-jubjub-and-zero-knowledge-proofs-5d73cf250de3 + brainpoolP256t1: + nist-prime256v1: + scep256k1: + e-382: + m-383: + diff --git a/_data/keys.yaml b/_data/keys.yaml index 56987d98..ead4aa3b 100644 --- a/_data/keys.yaml +++ b/_data/keys.yaml @@ -12,9 +12,7 @@ derrived_keys: 2101: type: uid data: 1334440654591915542993625911497130241 - description: 'Used for data protection. - - ' + description: Used for data protection. 2102: type: uid data: 1192299414131223233912285359034425728 @@ -44,16 +42,12 @@ derrived_keys: 2202: type: uid data: 291263742049262950426416465193106933345 - description: 'Used on A4 devices. A device-specific key. It is used to encrypt + description: Used on A4 devices. A device-specific key. It is used to encrypt the SHSH blobs on the device. - - ' 2203: type: uid data: 32226505706565189832158137978565999945 - description: 'It is used to encrypt the data partition key. - - ' + description: It is used to encrypt the data partition key. 2211: type: uid mode: AES-256-CBC diff --git a/_packages/node/yarn.lock b/_packages/node/yarn.lock new file mode 100644 index 00000000..8a737bd2 --- /dev/null +++ b/_packages/node/yarn.lock @@ -0,0 +1,3023 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.7.tgz#f2fbbfea87c44a21590ec515b778b2c26d8866e7" + integrity sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== + dependencies: + "@babel/helper-validator-identifier" "^7.29.7" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.28.6", "@babel/compat-data@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.29.7.tgz#6f0237f0f36d2e51c0570a636faed9d2d0efe629" + integrity sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.7.tgz#80c10b17248082968b57a857b91640971f2070f7" + integrity sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helpers" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.29.7", "@babel/generator@^7.29.8", "@babel/generator@^7.7.2": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.8.tgz#4b0b887885422643339e09022148a4c4ebaa4979" + integrity sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg== + dependencies: + "@babel/parser" "^7.29.8" + "@babel/types" "^7.29.8" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz#c70fe3c6ecbdc3fd2dd1b0f498428b88b82ce47f" + integrity sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw== + dependencies: + "@babel/types" "^7.29.7" + +"@babel/helper-compilation-targets@^7.28.6", "@babel/helper-compilation-targets@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz#7a1def704302401c47f64fa85589e974ae217042" + integrity sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz#6eddf286f2ec418f740c91d60a83347c55838ddd" + integrity sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/traverse" "^7.29.7" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz#5d4c3f928f315cf6c4184ea2fc3b5b38745b2430" + integrity sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + regexpu-core "^6.3.1" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.8": + version "0.6.8" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz#cf1e4462b613f2b54c41e6ff758d5dfcaa2c85d1" + integrity sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA== + dependencies: + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-plugin-utils" "^7.28.6" + debug "^4.4.3" + lodash.debounce "^4.0.8" + resolve "^1.22.11" + +"@babel/helper-globals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.29.7.tgz#f04a96fbd8473241b1079243f5b3f03a3010ab7b" + integrity sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA== + +"@babel/helper-member-expression-to-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz#8dbdb3ce0b5c487e1aec10e13c9a43a500814df8" + integrity sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-imports@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz#ef25048a518e828d7393fac5882ddd73921d7396" + integrity sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-module-transforms@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz#b062747a5997ba138637201328bbff77960574ae" + integrity sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/helper-optimise-call-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz#77b0b5b94f1997fa9d6e3125f445227b1faf9d85" + integrity sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong== + dependencies: + "@babel/types" "^7.29.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.28.6", "@babel/helper-plugin-utils@^7.29.7", "@babel/helper-plugin-utils@^7.8.0": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz#c0a0766f1a13617d8a17407d7ab8f9d486225ea4" + integrity sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw== + +"@babel/helper-remap-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz#34b1f68dd75b86d31df781a29c3ff2df88da82e6" + integrity sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-wrap-function" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/helper-replace-supers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz#bc3c3964329043c79112e513c1b198f16589ac21" + integrity sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.29.7" + "@babel/helper-optimise-call-expression" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz#50c95c7e4c4f54936cfa0116428edc559862d551" + integrity sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ== + dependencies: + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helper-string-parser@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz#7f0871d99824d23137d60f86fcf6130fd5a1b51f" + integrity sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw== + +"@babel/helper-validator-identifier@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#bd87084ced0c796ec46bda492de6e83d29e89fc2" + integrity sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== + +"@babel/helper-validator-option@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz#cf315be940213b354eb4abcc0bd01ebe3f73bc2a" + integrity sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw== + +"@babel/helper-wrap-function@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz#eec72163044548a0935e9d182bf2d547ec5ff483" + integrity sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw== + dependencies: + "@babel/template" "^7.29.7" + "@babel/traverse" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/helpers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.29.7.tgz#45abfde7548997e34376c3e69feb475cffb4a607" + integrity sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg== + dependencies: + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.29.7", "@babel/parser@^7.29.8": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.8.tgz#9653716a2f10c677b98fbc63d4bfb000c302cf17" + integrity sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA== + dependencies: + "@babel/types" "^7.29.8" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz#2b535896d933a85aa92377eaa3d51a437d54a4e3" + integrity sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz#b00711a9e52bf4fe55ef7e54b2ef4a881bf804c8" + integrity sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz#2375328852026a3cf6bc0bcf2de7d236f2d5e701" + integrity sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz#759a857c46c4d2a6199685cf71070d81ae5f743a" + integrity sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz#86de98dd8e03836178231ea96c27dab26016a705" + integrity sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz#f5d892681dbf4b08753436a5e55000d5ba728d6d" + integrity sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-import-assertions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz#c5cd868505269126cc18882e1f01f7b0e0e24b4e" + integrity sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz#6115264516e95ead0f35a41710906612e447f605" + integrity sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz#622c16f9ad63782fe6e83dadc7e40330744b7f1e" + integrity sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.29.7", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz#7c29388932313ed58413a0343048d75d92fb5b24" + integrity sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz#d651343f562c03f47951bd1802195d0e10605f27" + integrity sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-async-generator-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz#a5365617921d82a1fee33124a1102bb38a1e677d" + integrity sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-transform-async-to-generator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz#3b5e8f1fb58133cf701bcf0baaf6f01bfd1a8889" + integrity sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w== + dependencies: + "@babel/helper-module-imports" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-remap-async-to-generator" "^7.29.7" + +"@babel/plugin-transform-block-scoped-functions@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz#96d292634434082d6687bcdb81139affedf77e8c" + integrity sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-block-scoping@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz#baa376691ae16244cd14335422fca6900f54e17d" + integrity sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-class-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz#034897b8a21beec163332fac2de235b14409abdf" + integrity sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-class-static-block@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz#fed8efd19f3dd3e1114ee390707c70912778fd7c" + integrity sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-classes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz#61d3e5aaae0c838acc3204d9db7c8dc05c25815b" + integrity sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-globals" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-transform-computed-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz#95028787ca31901b9a20b5c6d9605c32346f55ad" + integrity sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/template" "^7.29.7" + +"@babel/plugin-transform-destructuring@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz#5781ec6947852e27b64c1165f0db431f408090e4" + integrity sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-transform-dotall-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz#b203de9740e4c7ff6b55ce436ed5313b88d70af8" + integrity sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-duplicate-keys@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz#8f3fe721835cb7a433420841dae90afc962ea7ae" + integrity sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz#dc6c405e55c01b7657e1827a25332c4ac17e9cac" + integrity sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-dynamic-import@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz#a83a6faec5bab5b619adf9d0eac6c1c270123c2a" + integrity sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-explicit-resource-management@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz#65c8b9f76ec915b02a0e1df703125a0fca58abaa" + integrity sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + +"@babel/plugin-transform-exponentiation-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz#00bf002fde8794356171f5d4df200f6bc0d5a303" + integrity sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-export-namespace-from@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz#d6014f45cec61d7691335c6c9804204bee801d51" + integrity sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-for-of@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz#c65a678592117717aacdb10c1b73a9cb85e830be" + integrity sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + +"@babel/plugin-transform-function-name@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz#8b87f8a7504dbcd96135167e3fc4f61126a7bd86" + integrity sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg== + dependencies: + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-transform-json-strings@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz#f57d63dcc05b4481c281acedcd8fc4e3e439a1d4" + integrity sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz#b90bd47463326c2a9d779e1bd5e1f88b9f421921" + integrity sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-logical-assignment-operators@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz#9b29425adf5c794967aabe4b046a046a167bac2f" + integrity sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-member-expression-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz#1281689fa2fefc17b110d21ebafd0fe9402d5309" + integrity sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-modules-amd@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz#f05ca662c8a1dc4be2f337af9c7e80369c942d6c" + integrity sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew== + dependencies: + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-modules-commonjs@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz#70e6835abf2663dafbe94b8ef1f51de7351ef135" + integrity sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ== + dependencies: + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-modules-systemjs@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.8.tgz#e60a6a42ac63a3095f9cc7264f698a100c8fe05d" + integrity sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA== + dependencies: + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + "@babel/traverse" "^7.29.8" + +"@babel/plugin-transform-modules-umd@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz#391d1c0215aca6307257f2f608598dfe55feb6cf" + integrity sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA== + dependencies: + "@babel/helper-module-transforms" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz#21e75d847b31189842fa7a77703722ed4b43d27d" + integrity sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-new-target@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz#714147ce7947e1b49cbd84137ca2e75e92b2a067" + integrity sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz#8a54cdf88c3f50433a6173117a286195b67714cc" + integrity sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-numeric-separator@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz#0266d5cd42ab87ec40fee45a4e36483cfdcbc66a" + integrity sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-object-rest-spread@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz#e0d5060241803922c545676613cc8acbbda0d266" + integrity sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A== + dependencies: + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/traverse" "^7.29.7" + +"@babel/plugin-transform-object-super@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz#e89283d14fa3c35817d4493ffc6bc649aa10e4eb" + integrity sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-replace-supers" "^7.29.7" + +"@babel/plugin-transform-optional-catch-binding@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz#729664f79985be504eba112c51de9f71d009030b" + integrity sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-optional-chaining@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz#b84a1b574b3c73001023092567e16c492b720e51" + integrity sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + +"@babel/plugin-transform-parameters@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz#a5ddc3b9bfb534814cb8334cbeba47d9cf9db090" + integrity sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-private-methods@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz#cea8bd3ab99533892897a02999d5b752584ad145" + integrity sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-private-property-in-object@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz#4a2f6be5aba47be7afbdb4cd7903c46edf3a7661" + integrity sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-property-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz#d45817cd72f9e134ab1f7fbb79264cfcb85cf636" + integrity sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-regenerator@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.8.tgz#3a4a4dd7214af9d524f0503bb97c99af5f4abf26" + integrity sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-regexp-modifiers@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz#68311c0c10af2198212528863f8542843e424025" + integrity sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-reserved-words@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz#a6feeb179b36a5f1fc6e3154c1eb727bdbe35876" + integrity sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-shorthand-properties@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz#25c0436b98f4bd9ca4b98e1fbd662743bbaab9bf" + integrity sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-spread@^7.29.7": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.8.tgz#c894cff38556a5dafeb412e13fc012b6df4b95a2" + integrity sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + +"@babel/plugin-transform-sticky-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz#a42c0fd1fa42f7e98e1e0c7757f72a1bbca3a015" + integrity sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-template-literals@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz#ada97d8e0832bca8edb315888aa654b1570f3835" + integrity sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-typeof-symbol@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz#d848a4677c1ee3485ab017f4018f04597798911c" + integrity sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-typescript@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz#f0449c3df7037bbe232043476851c38f5e4a7615" + integrity sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.29.7" + "@babel/helper-create-class-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.29.7" + "@babel/plugin-syntax-typescript" "^7.29.7" + +"@babel/plugin-transform-unicode-escapes@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz#1e99554b0cddfd650d649a9f2b996049893e5720" + integrity sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-unicode-property-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz#44444afc73768c2190fac4d95f7716817b7f204a" + integrity sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-unicode-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz#c3064b293ff7f1794b71f7650eec8db9896d3e59" + integrity sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/plugin-transform-unicode-sets-regex@^7.29.7": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz#b03ac9f27326f6197e8e574add83bbf33fc34ecd" + integrity sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + +"@babel/preset-env@^7.18.9": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.29.7.tgz#5e2ab5e764b493fdefc99c43aeaa70a9533a37fd" + integrity sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA== + dependencies: + "@babel/compat-data" "^7.29.7" + "@babel/helper-compilation-targets" "^7.29.7" + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.29.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.29.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.29.7" + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array" "^7.29.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.29.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.29.7" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.29.7" + "@babel/plugin-syntax-import-attributes" "^7.29.7" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.29.7" + "@babel/plugin-transform-async-generator-functions" "^7.29.7" + "@babel/plugin-transform-async-to-generator" "^7.29.7" + "@babel/plugin-transform-block-scoped-functions" "^7.29.7" + "@babel/plugin-transform-block-scoping" "^7.29.7" + "@babel/plugin-transform-class-properties" "^7.29.7" + "@babel/plugin-transform-class-static-block" "^7.29.7" + "@babel/plugin-transform-classes" "^7.29.7" + "@babel/plugin-transform-computed-properties" "^7.29.7" + "@babel/plugin-transform-destructuring" "^7.29.7" + "@babel/plugin-transform-dotall-regex" "^7.29.7" + "@babel/plugin-transform-duplicate-keys" "^7.29.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-dynamic-import" "^7.29.7" + "@babel/plugin-transform-explicit-resource-management" "^7.29.7" + "@babel/plugin-transform-exponentiation-operator" "^7.29.7" + "@babel/plugin-transform-export-namespace-from" "^7.29.7" + "@babel/plugin-transform-for-of" "^7.29.7" + "@babel/plugin-transform-function-name" "^7.29.7" + "@babel/plugin-transform-json-strings" "^7.29.7" + "@babel/plugin-transform-literals" "^7.29.7" + "@babel/plugin-transform-logical-assignment-operators" "^7.29.7" + "@babel/plugin-transform-member-expression-literals" "^7.29.7" + "@babel/plugin-transform-modules-amd" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-modules-systemjs" "^7.29.7" + "@babel/plugin-transform-modules-umd" "^7.29.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.29.7" + "@babel/plugin-transform-new-target" "^7.29.7" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.29.7" + "@babel/plugin-transform-numeric-separator" "^7.29.7" + "@babel/plugin-transform-object-rest-spread" "^7.29.7" + "@babel/plugin-transform-object-super" "^7.29.7" + "@babel/plugin-transform-optional-catch-binding" "^7.29.7" + "@babel/plugin-transform-optional-chaining" "^7.29.7" + "@babel/plugin-transform-parameters" "^7.29.7" + "@babel/plugin-transform-private-methods" "^7.29.7" + "@babel/plugin-transform-private-property-in-object" "^7.29.7" + "@babel/plugin-transform-property-literals" "^7.29.7" + "@babel/plugin-transform-regenerator" "^7.29.7" + "@babel/plugin-transform-regexp-modifiers" "^7.29.7" + "@babel/plugin-transform-reserved-words" "^7.29.7" + "@babel/plugin-transform-shorthand-properties" "^7.29.7" + "@babel/plugin-transform-spread" "^7.29.7" + "@babel/plugin-transform-sticky-regex" "^7.29.7" + "@babel/plugin-transform-template-literals" "^7.29.7" + "@babel/plugin-transform-typeof-symbol" "^7.29.7" + "@babel/plugin-transform-unicode-escapes" "^7.29.7" + "@babel/plugin-transform-unicode-property-regex" "^7.29.7" + "@babel/plugin-transform-unicode-regex" "^7.29.7" + "@babel/plugin-transform-unicode-sets-regex" "^7.29.7" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.15" + babel-plugin-polyfill-corejs3 "^0.14.0" + babel-plugin-polyfill-regenerator "^0.6.6" + core-js-compat "^3.48.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.18.6": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz#de9be1f47b785c979ec7b3a71f4cd8bae5267b62" + integrity sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ== + dependencies: + "@babel/helper-plugin-utils" "^7.29.7" + "@babel/helper-validator-option" "^7.29.7" + "@babel/plugin-syntax-jsx" "^7.29.7" + "@babel/plugin-transform-modules-commonjs" "^7.29.7" + "@babel/plugin-transform-typescript" "^7.29.7" + +"@babel/template@^7.29.7", "@babel/template@^7.3.3": + version "7.29.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.29.7.tgz#4d9d4004f645cdd304de958c725162784ecac700" + integrity sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/parser" "^7.29.7" + "@babel/types" "^7.29.7" + +"@babel/traverse@^7.29.7", "@babel/traverse@^7.29.8", "@babel/traverse@^7.7.2": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.8.tgz#4111014cdc71a0f95d9471907590baa0b8a6b28a" + integrity sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg== + dependencies: + "@babel/code-frame" "^7.29.7" + "@babel/generator" "^7.29.8" + "@babel/helper-globals" "^7.29.7" + "@babel/parser" "^7.29.8" + "@babel/template" "^7.29.7" + "@babel/types" "^7.29.8" + debug "^4.3.1" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.28.2", "@babel/types@^7.29.7", "@babel/types@^7.29.8", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.29.8" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.8.tgz#1229eef31d85156d70fa3f4cd859376d0eaf6863" + integrity sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg== + dependencies: + "@babel/helper-string-parser" "^7.29.7" + "@babel/helper-validator-identifier" "^7.29.7" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.6.tgz#8dc9afa2ac1506cb1a58f89940f1c124446c8df3" + integrity sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw== + +"@jest/console@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-28.1.3.tgz#2030606ec03a18c31803b8a36382762e447655df" + integrity sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + +"@jest/core@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.3.tgz#0ebf2bd39840f1233cd5f2d1e6fc8b71bd5a1ac7" + integrity sha512-CIKBrlaKOzA7YG19BEqCw3SLIsEwjZkeJzf5bdooVnW4bH5cktqe3JX+G2YV1aK5vP8N9na1IGWFzYaTp6k6NA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/reporters" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^28.1.3" + jest-config "^28.1.3" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-resolve-dependencies "^28.1.3" + jest-runner "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + jest-watcher "^28.1.3" + micromatch "^4.0.4" + pretty-format "^28.1.3" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.3.tgz#abed43a6b040a4c24fdcb69eab1f97589b2d663e" + integrity sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA== + dependencies: + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + +"@jest/expect-utils@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.3.tgz#58561ce5db7cd253a7edddbc051fb39dda50f525" + integrity sha512-wvbi9LUrHJLn3NlDW6wF2hvIMtd4JUl2QNVrjq+IBSHirgfrR3o9RnVtxzdEGO2n9JyIWwHnLfby5KzqBGg2YA== + dependencies: + jest-get-type "^28.0.2" + +"@jest/expect@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.3.tgz#9ac57e1d4491baca550f6bdbd232487177ad6a72" + integrity sha512-lzc8CpUbSoE4dqT0U+g1qODQjBRHPpCPXissXD4mS9+sWQdmmpeJ9zSH1rS1HEkrsMN0fb7nKrJ9giAR1d3wBw== + dependencies: + expect "^28.1.3" + jest-snapshot "^28.1.3" + +"@jest/fake-timers@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.3.tgz#230255b3ad0a3d4978f1d06f70685baea91c640e" + integrity sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw== + dependencies: + "@jest/types" "^28.1.3" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +"@jest/globals@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.3.tgz#a601d78ddc5fdef542728309894895b4a42dc333" + integrity sha512-XFU4P4phyryCXu1pbcqMO0GSQcYe1IsalYCDzRNyhetyeyxMcIxa11qPNDpVNLeretItNqEmYYQn1UYz/5x1NA== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/types" "^28.1.3" + +"@jest/reporters@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.3.tgz#9adf6d265edafc5fc4a434cfb31e2df5a67a369a" + integrity sha512-JuAy7wkxQZVNU/V6g9xKzCGC5LVXx9FDcABKsSXp5MiKPEE2144a/vXTEDoyzjUpZKfVwp08Wqg5A4WfTMAzjg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + jest-worker "^28.1.3" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + terminal-link "^2.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-28.1.3.tgz#ad8b86a66f11f33619e3d7e1dcddd7f2d40ff905" + integrity sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg== + dependencies: + "@sinclair/typebox" "^0.24.1" + +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== + dependencies: + "@jridgewell/trace-mapping" "^0.3.13" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-28.1.3.tgz#5eae945fd9f4b8fcfce74d239e6f725b6bf076c5" + integrity sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg== + dependencies: + "@jest/console" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-28.1.3.tgz#9d0c283d906ac599c74bde464bc0d7e6a82886c3" + integrity sha512-NIMPEqqa59MWnDi1kvXXpYbqsfQmSJsIbnd85mdVGkiDfQ9WQQTXOLsvISUfonmnBT+w85WEgneCigEEdHDFxw== + dependencies: + "@jest/test-result" "^28.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + slash "^3.0.0" + +"@jest/transform@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.3.tgz#59d8098e50ab07950e0f2fc0fc7ec462371281b0" + integrity sha512-u5dT5di+oFI6hfcLOHGTAfmUxFRrjK+vnaP0kkVow9Md/M7V/MxqQMOz/VV25UZO8pzeA9PjfTpOu6BDuwSPQA== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^28.1.3" + "@jridgewell/trace-mapping" "^0.3.13" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.1" + +"@jest/types@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-28.1.3.tgz#b05de80996ff12512bc5ceb1d208285a7d11748b" + integrity sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ== + dependencies: + "@jest/schemas" "^28.1.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/remapping@^2.3.5": + version "2.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1" + integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@sinclair/typebox@^0.24.1": + version "0.24.52" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.24.52.tgz#78390a213e5b42fb570f1a59e92f96a02dfbd114" + integrity sha512-DNKwjDaMLKWXvjs/zCkSzA3rBzZVv4tuLCEV8ArRyHAqCtPtbUcQj0XS4h7y/CqL9pI6VpCmcH5A6oPOBAD9+Q== + +"@sinonjs/commons@^1.7.0": + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^9.1.2": + version "9.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" + integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== + dependencies: + "@sinonjs/commons" "^1.7.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" + integrity sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74" + integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q== + dependencies: + "@babel/types" "^7.28.2" + +"@types/glob@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^28.1.6": + version "28.1.8" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.8.tgz#6936409f3c9724ea431efd412ea0238a0f03b09b" + integrity sha512-8TJkV++s7B6XqnDrzR1m/TT0A0h948Pnl/097veySPN67VRAgQ4gZ7n2KfJo2rVq6njQjdxU3GCCyDvAeuHoiw== + dependencies: + expect "^28.0.0" + pretty-format "^28.0.0" + +"@types/minimatch@*": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-6.0.0.tgz#4d207b1cc941367bdcd195a3a781a7e4fc3b1e03" + integrity sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA== + dependencies: + minimatch "*" + +"@types/node@*": + version "26.2.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-26.2.0.tgz#5a4875a862fda8fdc57de8faa579bb81ecba1685" + integrity sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg== + dependencies: + undici-types "~8.3.0" + +"@types/node@^17.0.21": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/prettier@^2.1.5": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/semver@^7.3.9": + version "7.8.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.8.0.tgz#0bfe3ec51f5e9615bc317174cd5b88ea08b7fc2f" + integrity sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.35" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.35.tgz#07013e46aa4d7d7d50a49e15604c1c5340d4eb24" + integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + dependencies: + "@types/yargs-parser" "*" + +acorn-walk@^8.1.1: + version "8.3.5" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.5.tgz#8a6b8ca8fc5b34685af15dabb44118663c296496" + integrity sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1: + version "8.18.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.18.0.tgz#4faf01b2d6d326bfeed97aea1f52220b5f4c1940" + integrity sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +babel-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.3.tgz#c1187258197c099072156a0a121c11ee1e3917d5" + integrity sha512-epUaPOEWMk3cWX0M/sPvCHHCe9fMFAa/9hXEgKP8nFfNl/jlGkE9ucq9NqkZGXLDduCJYS0UvSlPUwC0S+rH6Q== + dependencies: + "@jest/transform" "^28.1.3" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^28.1.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.3.tgz#1952c4d0ea50f2d6d794353762278d1d8cca3fbe" + integrity sha512-Ys3tUKAmfnkRUpPdpa98eYrAR0nV+sSFUZZEGuQ2EbFd1y4SOLtD5QDNHAq+bb9a+bbXvYQC4b+ID/THIMcU6Q== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-polyfill-corejs2@^0.4.15: + version "0.4.17" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz#198f970f1c99a856b466d1187e88ce30bd199d91" + integrity sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w== + dependencies: + "@babel/compat-data" "^7.28.6" + "@babel/helper-define-polyfill-provider" "^0.6.8" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.14.0: + version "0.14.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz#6ac08d2f312affb70c4c69c0fbba4cb417ee5587" + integrity sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.8" + core-js-compat "^3.48.0" + +babel-plugin-polyfill-regenerator@^0.6.6: + version "0.6.8" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz#8a6bfd5dd54239362b3d06ce47ac52b2d95d7721" + integrity sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.8" + +babel-preset-current-node-syntax@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz#20730d6cdc7dda5d89401cab10ac6a32067acde6" + integrity sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-28.1.3.tgz#5dfc20b99abed5db994406c2b9ab94c73aaa419d" + integrity sha512-L+fupJvlWAHbQfn74coNX3zf60LXMJsezNvvx8eIh7iOR1luJ1poxYgQk1F8PYtNq/6QODDHCqsSnTFSWC491A== + dependencies: + babel-plugin-jest-hoist "^28.1.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + +baseline-browser-mapping@^2.11.12: + version "2.11.13" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.11.13.tgz#660073103c1bee93e54df55f117b7528adf6af19" + integrity sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ== + +brace-expansion@^1.1.7: + version "1.1.18" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.18.tgz#3ce74d89885136be1535341f8c3d4425c29a5cab" + integrity sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.4.tgz#589dab11c0018d0366be64cd8bf12c8dbecc8326" + integrity sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg== + dependencies: + balanced-match "^1.0.0" + +brace-expansion@^5.0.8: + version "5.0.9" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.9.tgz#7c72438809b5fa5babf54199a1f1c281a6984fcf" + integrity sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg== + dependencies: + balanced-match "^4.0.2" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.24.0, browserslist@^4.28.7: + version "4.28.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.8.tgz#a3c79ceb70028527e5da7dafc887f3200b5168c0" + integrity sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA== + dependencies: + baseline-browser-mapping "^2.11.12" + caniuse-lite "^1.0.30001809" + electron-to-chromium "^1.5.402" + node-releases "^2.0.53" + update-browserslist-db "^1.3.0" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001809: + version "1.0.30001809" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001809.tgz#e6cf71f14ddfe008f114dd2a846923be3c03a07b" + integrity sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +convert-source-map@^1.4.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +core-js-compat@^3.48.0: + version "3.50.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.50.0.tgz#d5922c2a692ab1cba6078c920e7c5567421ae08e" + integrity sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q== + dependencies: + browserslist "^4.28.7" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +dedent@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" + integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== + +diff@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.4.tgz#7a6dbfda325f25f07517e9b518f897c08332e07d" + integrity sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ== + +electron-to-chromium@^1.5.402: + version "1.5.403" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.403.tgz#8a6e422bc68c5d2fa4d8c5fa2ba9a583c3d4452c" + integrity sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA== + +emittery@^0.10.2: + version "0.10.2" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" + integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^28.0.0, expect@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-28.1.3.tgz#90a7c1a124f1824133dd4533cce2d2bdcb6603ec" + integrity sha512-eEh0xn8HlsuOBxFgIss+2mX85VAS4Qy3OSkjV7rlBWljtA4oWH37glVGyOZSZvErDT/yBywZdPGwCXuTvSG85g== + dependencies: + "@jest/expect-utils" "^28.1.3" + jest-get-type "^28.0.2" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hasown@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003" + integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== + dependencies: + function-bind "^1.1.2" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.16.1: + version "2.16.2" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.2.tgz#3e07450a8080ebce3fbf0cac494f4d2ab324e082" + integrity sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== + dependencies: + hasown "^2.0.3" + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.2.0.tgz#cb4535162b5784aa623cee21a7252cf2c807ac93" + integrity sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jest-changed-files@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-28.1.3.tgz#d9aeee6792be3686c47cb988a8eaf82ff4238831" + integrity sha512-esaOfUWJXk2nfZt9SPyC8gA1kNfdKLkQWyzsMlqq8msYSlNKfmZxfRgZn4Cd4MGVUF+7v6dBs0d5TOAKa7iIiA== + dependencies: + execa "^5.0.0" + p-limit "^3.1.0" + +jest-circus@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.3.tgz#d14bd11cf8ee1a03d69902dc47b6bd4634ee00e4" + integrity sha512-cZ+eS5zc79MBwt+IhQhiEp0OeBddpc1n8MBo1nMB8A7oPMKEO+Sre+wHaLJexQUj9Ya/8NOBY0RESUgYjB6fow== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/expect" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^0.7.0" + is-generator-fn "^2.0.0" + jest-each "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-runtime "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + p-limit "^3.1.0" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.3.tgz#558b33c577d06de55087b8448d373b9f654e46b2" + integrity sha512-roY3kvrv57Azn1yPgdTebPAXvdR2xfezaKKYzVxZ6It/5NCxzJym6tUI5P1zkdWhfUYkxEI9uZWcQdaFLo8mJQ== + dependencies: + "@jest/core" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + import-local "^3.0.2" + jest-config "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + prompts "^2.0.1" + yargs "^17.3.1" + +jest-config@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.3.tgz#e315e1f73df3cac31447eed8b8740a477392ec60" + integrity sha512-MG3INjByJ0J4AsNBm7T3hsuxKQqFIiRo/AUqb1q9LRKI5UU6Aar9JHbr9Ivn1TVwfUD9KirRoM/T6u8XlcQPHQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^28.1.3" + "@jest/types" "^28.1.3" + babel-jest "^28.1.3" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^28.1.3" + jest-environment-node "^28.1.3" + jest-get-type "^28.0.2" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-runner "^28.1.3" + jest-util "^28.1.3" + jest-validate "^28.1.3" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^28.1.3" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.3.tgz#948a192d86f4e7a64c5264ad4da4877133d8792f" + integrity sha512-8RqP1B/OXzjjTWkqMX67iqgwBVJRgCyKD3L9nq+6ZqJMdvjE8RgHktqZ6jNrkdMT+dJuYNI3rhQpxaz7drJHfw== + dependencies: + chalk "^4.0.0" + diff-sequences "^28.1.1" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-docblock@^28.1.1: + version "28.1.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-28.1.1.tgz#6f515c3bf841516d82ecd57a62eed9204c2f42a8" + integrity sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-28.1.3.tgz#bdd1516edbe2b1f3569cfdad9acd543040028f81" + integrity sha512-arT1z4sg2yABU5uogObVPvSlSMQlDA48owx07BDPAiasW0yYpYHYOo4HHLz9q0BVzDVU4hILFjzJw0So9aCL/g== + dependencies: + "@jest/types" "^28.1.3" + chalk "^4.0.0" + jest-get-type "^28.0.2" + jest-util "^28.1.3" + pretty-format "^28.1.3" + +jest-environment-node@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.3.tgz#7e74fe40eb645b9d56c0c4b70ca4357faa349be5" + integrity sha512-ugP6XOhEpjAEhGYvp5Xj989ns5cB1K6ZdjBYuS30umT4CQEETaxSiPcZ/E1kFktX4GkrcM4qu07IIlDYX1gp+A== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + jest-mock "^28.1.3" + jest-util "^28.1.3" + +jest-get-type@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" + integrity sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA== + +jest-haste-map@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-28.1.3.tgz#abd5451129a38d9841049644f34b034308944e2b" + integrity sha512-3S+RQWDXccXDKSWnkHa/dPwt+2qwA8CJzR61w3FoYCvoo3Pn8tvGcysmMF0Bj0EX5RYvAI2EIvC57OmotfdtKA== + dependencies: + "@jest/types" "^28.1.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^28.0.2" + jest-util "^28.1.3" + jest-worker "^28.1.3" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-28.1.3.tgz#a6685d9b074be99e3adee816ce84fd30795e654d" + integrity sha512-WFVJhnQsiKtDEo5lG2mM0v40QWnBM+zMdHHyJs8AWZ7J0QZJS59MsyKeJHWhpBZBH32S48FOVvGyOFT1h0DlqA== + dependencies: + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-matcher-utils@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.3.tgz#5a77f1c129dd5ba3b4d7fc20728806c78893146e" + integrity sha512-kQeJ7qHemKfbzKoGjHHrRKH6atgxMk8Enkk2iPQ3XwO6oE/KYD8lMYOziCkeSB9G4adPM4nR1DE8Tf5JeWH6Bw== + dependencies: + chalk "^4.0.0" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + pretty-format "^28.1.3" + +jest-message-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-28.1.3.tgz#232def7f2e333f1eecc90649b5b94b0055e7c43d" + integrity sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^28.1.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^28.1.3" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-28.1.3.tgz#d4e9b1fc838bea595c77ab73672ebf513ab249da" + integrity sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^28.0.2: + version "28.0.2" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" + integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== + +jest-resolve-dependencies@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.3.tgz#8c65d7583460df7275c6ea2791901fa975c1fe66" + integrity sha512-qa0QO2Q0XzQoNPouMbCc7Bvtsem8eQgVPNkwn9LnS+R2n8DaVDPL/U1gngC0LTl1RYXJU0uJa2BMC2DbTfFrHA== + dependencies: + jest-regex-util "^28.0.2" + jest-snapshot "^28.1.3" + +jest-resolve@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-28.1.3.tgz#cfb36100341ddbb061ec781426b3c31eb51aa0a8" + integrity sha512-Z1W3tTjE6QaNI90qo/BJpfnvpxtaFTFw5CDgwpyE/Kz8U/06N1Hjf4ia9quUhCh39qIGWF1ZuxFiBiJQwSEYKQ== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-pnp-resolver "^1.2.2" + jest-util "^28.1.3" + jest-validate "^28.1.3" + resolve "^1.20.0" + resolve.exports "^1.1.0" + slash "^3.0.0" + +jest-runner@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.3.tgz#5eee25febd730b4713a2cdfd76bdd5557840f9a1" + integrity sha512-GkMw4D/0USd62OVO0oEgjn23TM+YJa2U2Wu5zz9xsQB1MxWKDOlrnykPxnMsN0tnJllfLPinHTka61u0QhaxBA== + dependencies: + "@jest/console" "^28.1.3" + "@jest/environment" "^28.1.3" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.10.2" + graceful-fs "^4.2.9" + jest-docblock "^28.1.1" + jest-environment-node "^28.1.3" + jest-haste-map "^28.1.3" + jest-leak-detector "^28.1.3" + jest-message-util "^28.1.3" + jest-resolve "^28.1.3" + jest-runtime "^28.1.3" + jest-util "^28.1.3" + jest-watcher "^28.1.3" + jest-worker "^28.1.3" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.3.tgz#a57643458235aa53e8ec7821949e728960d0605f" + integrity sha512-NU+881ScBQQLc1JHG5eJGU7Ui3kLKrmwCPPtYsJtBykixrM2OhVQlpMmFWJjMyDfdkGgBMNjXCGB/ebzsgNGQw== + dependencies: + "@jest/environment" "^28.1.3" + "@jest/fake-timers" "^28.1.3" + "@jest/globals" "^28.1.3" + "@jest/source-map" "^28.1.2" + "@jest/test-result" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + execa "^5.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^28.1.3" + jest-message-util "^28.1.3" + jest-mock "^28.1.3" + jest-regex-util "^28.0.2" + jest-resolve "^28.1.3" + jest-snapshot "^28.1.3" + jest-util "^28.1.3" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.3.tgz#17467b3ab8ddb81e2f605db05583d69388fc0668" + integrity sha512-4lzMgtiNlc3DU/8lZfmqxN3AYD6GGLbl+72rdBpXvcV+whX7mDrREzkPdp2RnmfIiWBg1YbuFSkXduF2JcafJg== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/traverse" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^28.1.3" + "@jest/transform" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/babel__traverse" "^7.0.6" + "@types/prettier" "^2.1.5" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^28.1.3" + graceful-fs "^4.2.9" + jest-diff "^28.1.3" + jest-get-type "^28.0.2" + jest-haste-map "^28.1.3" + jest-matcher-utils "^28.1.3" + jest-message-util "^28.1.3" + jest-util "^28.1.3" + natural-compare "^1.4.0" + pretty-format "^28.1.3" + semver "^7.3.5" + +jest-util@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-28.1.3.tgz#f4f932aa0074f0679943220ff9cbba7e497028b0" + integrity sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ== + dependencies: + "@jest/types" "^28.1.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-28.1.3.tgz#e322267fd5e7c64cea4629612c357bbda96229df" + integrity sha512-SZbOGBWEsaTxBGCOpsRWlXlvNkvTkY0XxRfh7zYmvd8uL5Qzyg0CHAXiXKROflh801quA6+/DsT4ODDthOC/OA== + dependencies: + "@jest/types" "^28.1.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^28.0.2" + leven "^3.1.0" + pretty-format "^28.1.3" + +jest-watcher@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-28.1.3.tgz#c6023a59ba2255e3b4c57179fc94164b3e73abd4" + integrity sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g== + dependencies: + "@jest/test-result" "^28.1.3" + "@jest/types" "^28.1.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.10.2" + jest-util "^28.1.3" + string-length "^4.0.1" + +jest-worker@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-28.1.3.tgz#7e3c4ce3fa23d1bb6accb169e7f396f98ed4bb98" + integrity sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.3.tgz#e9c6a7eecdebe3548ca2b18894a50f45b36dfc6b" + integrity sha512-N4GT5on8UkZgH0O5LUavMRV1EDEhNTL0KEfRmDIeZHSV7p2XgLoY9t9VDUgL6o+yfdgYHVxuz81G8oB9VG5uyA== + dependencies: + "@jest/core" "^28.1.3" + "@jest/types" "^28.1.3" + import-local "^3.0.2" + jest-cli "^28.1.3" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.15.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.15.1.tgz#24bc95028f361cdaaa84745b06a109c4486773c0" + integrity sha512-S99WuO3HlhO3XN41EtYUNl9zzXjoJx7QvmipxsJVxtCBT0YHEFy+iOJhjSvrmV12nYhWpZaM8lPHkJm0yUMbag== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^3.0.2, jsesc@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +micromatch@^4.0.4: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@*, minimatch@^10.2.6: + version "10.2.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.6.tgz#fd956bbe0b77241e9f15ac5dccb1c638060968ef" + integrity sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A== + dependencies: + brace-expansion "^5.0.8" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" + integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== + dependencies: + brace-expansion "^2.0.1" + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.53: + version "2.0.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.53.tgz#0fe5ad8a7935e075172f574e56f0c20f07fa41af" + integrity sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ== + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601" + integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== + +pirates@^4.0.4: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pretty-format@^28.0.0, pretty-format@^28.1.3: + version "28.1.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.3.tgz#c9fba8cedf99ce50963a11b27d982a9ae90970d5" + integrity sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q== + dependencies: + "@jest/schemas" "^28.1.3" + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +regenerate-unicode-properties@^10.2.2: + version "10.2.2" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz#aa113812ba899b630658c7623466be71e1f86f66" + integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regexpu-core@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" + integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.2" + regjsgen "^0.8.0" + regjsparser "^0.13.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.2.1" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.13.0: + version "0.13.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.13.2.tgz#f654734b5c588b22ba3e21693b30523417180808" + integrity sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ== + dependencies: + jsesc "~3.1.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== + +resolve@^1.20.0, resolve@^1.22.11: + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== + dependencies: + es-errors "^1.3.0" + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.5, semver@^7.5.3: + version "7.8.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.5.tgz#39b646037dd50c14fb451e7e4cac58ed8b863f69" + integrity sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-hyperlinks@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +terminal-link@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +ts-node@^10.7.0: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^2.12.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +typescript@^4.6.2: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-8.3.0.tgz#44e9fc9f3244648cdea35e4f9bb2d681e9410809" + integrity sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz#65a7adfad8574c219890e219285ce4c64ed67eaa" + integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz#301d4f8a43d2b75c97adfad87c9dd5350c9475d1" + integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== + +update-browserslist-db@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.3.1.tgz#a71c28dd22f505481dbc4689087b18d933e90afd" + integrity sha512-ZZ61DsRsOnakl74HAmp3oSN4aXUmEWXf+i/yv0h7tIBfICc3VdrFErQKUUKPgu3AMsTUMbcongALEN4l6GSUrQ== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yaml@^2.2.2: + version "2.9.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.9.0.tgz#78274afd93598a1dfdd6130df6a566defcbf9aa4" + integrity sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.3" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.3.tgz#779dffe6bcafec596a7172e983289a588647faaa" + integrity sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From e5a2bb87bff7d499c263fe813486352ee89875d3 Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Mon, 10 Aug 2026 20:08:33 -0700 Subject: [PATCH 2/7] Crypto intermediate progress --- .gitmodules | 3 + _data/cryptography.yml | 541 +++++++++++++++++++++++++++++++---------- _data/curves.yaml | 72 ++++++ ext/std-curves | 1 + 4 files changed, 495 insertions(+), 122 deletions(-) create mode 100644 .gitmodules create mode 100644 _data/curves.yaml create mode 160000 ext/std-curves diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..6ea55060 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "ext/std-curves"] + path = ext/std-curves + url = https://github.com/J08nY/std-curves.git diff --git a/_data/cryptography.yml b/_data/cryptography.yml index 0200dc28..478f7315 100644 --- a/_data/cryptography.yml +++ b/_data/cryptography.yml @@ -4,11 +4,16 @@ credits: - rickmark - gemini - https://safecurves.cr.yp.to + - https://wikipedia.org +see_also: + - curves + - keys + - pki --- types: field: description: A field is a set of numbers that can be added, subtracted, multiplied, and divided according - to certain rules. Typically defined as an Alban group. + to certain rules. Typically defined as an Alban group. `n` is assumed to be `x=0..n` and `y=0..n`. parameters: n: aliases: @@ -37,8 +42,8 @@ types: • Polynomial roots (): Find roots of polynomials over a prime field by passing the prime p as a domain argument, such as . [7, 8, 9] - citations: - 1: ;ttps://www.youtube.com/watch?v=-WGc4VapKj0 + citations: !citations + 1: https://www.youtube.com/watch?v=-WGc4VapKj0 2: https://www.johndcook.com/blog/finite-fields/ 3: https://kconrad.math.uconn.edu/math5230f08/parirefcard.pdf 4: https://pari.math.u-bordeaux.fr/dochtml/html/Arithmetic_functions.html @@ -48,6 +53,38 @@ types: 8: https://pari.math.u-bordeaux.fr/dochtml/html-stable/Polynomials_and_power_series.html 9: https://en.wikipedia.org/wiki/Finite_field_arithmetic binary: + description: !markdown > + Binary fields, or Galois Fields denoted as $GF(2^m)$ where m ≥ 1, are finite fields containing $2^m$ + elements. The simplest binary field is GF(2) with elements $\{0, 1\}$, where arithmetic operations follow + modulo 2 rules (addition is XOR, multiplication is AND). Larger fields $GF(2^m)$ represent elements as + binary polynomials reduced modulo an irreducible primitive polynomial. [1, 2, 3, 4, 5] + + # Core Properties of Binary Fields + + * Order: Exactly $2^m$ elements, usually representing m-bit words or bytes (e.g., GF(2⁸) in AES encryption). + * Characteristic: Every binary field has characteristic 2, meaning x + x = 0 for any element. + * Addition and Subtraction: Implemented as a bitwise XOR operation , meaning addition is identical + to subtraction. + * Multiplication: Carried out via polynomial multiplication followed by reduction using a fixed + irreducible reduction polynomial without carry propagation (carry-less + multiplication). [1, 2, 3, 5, 6, 7, 8] + + # Applications + + * Cryptography: Used in block ciphers like AES (GF(2⁸)) and elliptic curve cryptography. + * Error Correction: Utilized in Reed-Solomon codes and cyclic redundancy checks (CRCs) for + reliable data transmission. [5, 6, 7, 9] + citations: + 1: https://joyofcryptography.com/fields/ + 2: https://en.wikipedia.org/wiki/GF(2) + 3: https://www.mathworks.com/help/comm/ref/gf.html + 4: https://www.geeksforgeeks.org/engineering-mathematics/galois-fields-and-its-properties/ + 5: https://www.salimwireless.com/2026/01/galois-fields-gf2-and-gf2m.html + 6: https://sefiks.com/2025/01/16/a-gentle-introduction-to-elliptic-curves-over-binary-fields/ + 7: https://www.youtube.com/watch?v=-WGc4VapKj0 + 8: https://www.felixcloutier.com/x86/gf2p8mulb + 9: https://en.wikipedia.org/wiki/Finite_field_arithmetic + point: description: A point on a cartisian plane. This can be expressed typically as an ordered pair of integers, almost @@ -67,14 +104,165 @@ types: type: positive_integer y: type: positive_integer - prime: description: A prime number. positive_prime: derived_from: positive_integer positive_integer: +rng: + ansi-x9.62: + description: !markdown > + The ANSI X9.62 RNG is a legacy pseudorandom number generator specified in Annex A.4 of the 1998 ANSI X9.62 + standard for the Elliptic Curve Digital Signature Algorithm (ECDSA). It was widely used in financial + cryptography to generate secret keys and nonces, but it has been deprecated and disallowed since + January 1, 2016. [1, 2, 3, 4, 5] + + # Overview and Status + + * Origin: Defined in ANSI X9.62-1998 Annex A.4 (). + * Purpose: Designed to supply cryptographically secure random values specifically for ECDSA operations. + * Current Status: Retired and deprecated by NIST under SP 800-131A guidelines. + * Reason for Retirement: Advances in cryptanalysis and modern security requirements rendered legacy 1998-era designs like X9.62 and X9.31 vulnerable or insufficient compared to modern Deterministic Random Bit Generators (DRBGs) like CTR_DRBG or Hash_DRBG. [1, 2, 4, 5] + + # Technical Context + + * Function: Relied on internal state updates combined with secret/seed values (requiring roughly 20 to 64 bytes of seed material depending on implementation details). + * Replacements: Modern standards transitioned toward NIST SP 800-90A DRBGs (such as HMAC-DRBG, Hash-DRBG, and CTR-DRBG) for all cryptographic randomness. [4, 8, 9] + citations: + [1] https://cseweb.ucsd.edu/classes/fa21/cse107-a/slides/18-rngs.pdf + [2] https://csrc.nist.rip/projects/Cryptographic-Algorithm-Validation-Program/Validation-Notes + [3] https://csrc.nist.rip/projects/cryptographic-algorithm-validation-program/validation-notes + [4] https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/retired-testing + [5] https://csrc.nist.rip/library/NIST%20FIPS%20140-2%20Security%20Requirements%20for%20Cryptographic%20Modules,%20Annex%20C;%20Approved%20Random%20Number%20Generators,%202001-03%20(2009%20Minor%20Edits).pdf + [6] https://icmconference.org/wp-content/uploads/C14WangZ-and-TungW.pdf + [7] https://security.stackexchange.com/questions/185520/what-is-the-format-of-an-x9-62-key + [8] https://opentitan.org/book/hw/ip/csrng/ + [9] https://pmc.ncbi.nlm.nih.gov/articles/PMC9689501/ + secg: + description: !markdown > + The SECG generation and validation methods for verifiably random elliptic curve domain parameters align with ANSI X9.62 and are detailed in the Standards for Efficient Cryptography Group specifications. These parameters define standard curves used across cryptography. [1, 2, 3] + Overview of SECG Parameter Generation + • Verifiably Random Basis: Curves are created using a fixed seed so anyone can re-verify the derivation process. + • Compatibility: The procedures match historical ANSI X9.62 and IEEE 1363 standards. + • Naming Conventions: Resulting curves in SEC 2 use prefixes like for prime fields and for binary fields. [1, 4, 5, 6, 7] + + Validation and Use + + • Domain Verification: Implementers validate unknown parameters using specified checks to ensure safety before active deployment. + • Standard Recommendations: Using pre-generated named parameters avoids slow, error-prone custom curve creation. [3] + citations: + + [1] https://dissect.crocs.fi.muni.cz/standards/secg + [2] https://www.secg.org/ + [3] https://en.wikipedia.org/wiki/Elliptic-curve_cryptography + [4] https://is.muni.cz/th/maq0p/sbapr_final_digital.pdf + [5] https://dissect.crocs.fi.muni.cz/standards/x962 + [6] https://std.neuromancer.sk/methods/secg/ + [7] https://www.johndcook.com/blog/2018/08/21/a-tale-of-two-elliptic-curves/ + + + nist: + description: !markdown > + The term NIST DRNG usually refers to NIST DRBG (Deterministic Random Bit Generator), which is the official technical term used by the National Institute of Standards and Technology (NIST) for a cryptographically secure pseudorandom number generator (PRNG). [1, 2] + It can also refer to a physical Digital Random Number Generator (such as Intel's hardware-based DRNG architecture) designed to comply with NIST's rigid cryptographic standards. [3, 4, 5] + ------------------------------ + ## The NIST SP 800-90 Core Standards + NIST regulates random number generation through the SP 800-90 series, which dictates how secure random numbers must be processed, seeded, and tested: [2, 6, 7, 8] + + * + * [SP 800-90A](https://csrc.nist.gov/projects/random-bit-generation): Specifies the approved deterministic algorithms (DRBGs) used to expand a highly random mathematical "seed" into a stream of secure cryptographic bits. + * SP 800-90B: Outlines the rules for the underlying physical entropy sources (the raw noise source providing true randomness). + * [SP 800-90C](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c): Establishes construction standards for combining the entropy source and the DRBG mechanism together seamlessly. [1, 2, 6, 9, 10] + * + + ## Approved NIST DRBG Mechanisms + When designing a software or hardware system to meet NIST compliance, developers must choose from three currently approved cryptographic mechanisms defined in SP 800-90A: [11, 12] + + * + * CTR_DRBG: Built on symmetric block ciphers like AES in counter mode. + * Hash_DRBG: Built on secure cryptographic hash functions like SHA-256. + * HMAC_DRBG: Built on Hash-based Message Authentication Codes. [11, 13] + * + + (Note: An older standard, Dual_EC_DRBG, was formally withdrawn and banned by NIST after it was discovered to contain a potential backdoor). [11, 14] + ## Hardware Implementations (Intel & AMD DRNG) + In hardware architectures, a "DRNG" framework typically bundles an on-chip True Random Number Generator (TRNG) with a deterministic circuit. For example, Intel's onboard architecture uses a physical thermal noise source to consistently feed a NIST-compliant CTR_DRBG. Software applications then access these random pools using assembly commands: [3, 15, 16, 17] + + * + * RDRAND: Pulls pseudorandom data directly out of the internal DRBG engine. + * RDSEED: Pulls raw, high-entropy bits straight from the conditioning hardware to seed other software-based PRNGs. [3, 15, 18, 19, 20] + * + + ## Testing for Compliance + To verify that a DRNG functions correctly without predictability or bias, developers evaluate its outputs using the [NIST Statistical Test Suite (SP 800-22)](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software). This suite subjects output bitstreams to 15 distinct frequency, pattern, and matrix mathematical tests to spot hidden statistical anomalies. [21, 22, 23, 24, 25] + ------------------------------ + If you are implementing or auditing a random number generator, let me know: + + * + * Are you working on a software application or a hardware/firmware implementation? + * Do you need help choosing a specific cryptographic algorithm (like AES-CTR vs. SHA-256)? + * Are you prepping a module for FIPS 140-3 validation? + * + + citations: + [1] [https://csrc.nist.gov](https://csrc.nist.gov/glossary/term/deterministic_random_bit_generator) + [2] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) + [3] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E306_PublicUse.pdf) + [4] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E72_PublicUse.pdf) + [5] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E232_PublicUse.pdf) + [6] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) + [7] [https://lightshipsec.com](https://lightshipsec.com/nist-800-90b-concepts/) + [8] [https://en-support.renesas.com](https://en-support.renesas.com/knowledgeBase/22372154) + [9] [https://csrc.nist.gov](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c) + [10] [https://www.nist.gov](https://www.nist.gov/publications/recommendation-random-bit-generator-rbg-constructions) + [11] [https://en.wikipedia.org](https://en.wikipedia.org/wiki/NIST_SP_800-90A) + [12] [https://postquantum.com](https://postquantum.com/post-quantum/qrng-buyers-guide/) + [13] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp3401.pdf) + [14] [https://csrc.nist.rip](https://csrc.nist.rip/publications/nistpubs/800-90A/SP800-90A.pdf) + [15] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E233_PublicUse.pdf) + [16] [https://www.ingeniars.com](https://www.ingeniars.com/in_product/rng-ip-core/) + [17] [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC11675632/) + [18] [https://security.stackexchange.com](https://security.stackexchange.com/questions/195515/is-rdrand-used-in-a-safe-way-by-windows-10) + [19] [https://www.linuxjournal.com](https://www.linuxjournal.com/content/amd-confirms-zen-5-rng-flaw-when-random-isnt-random-enough) + [20] [https://forums.raspberrypi.com](https://forums.raspberrypi.com/viewtopic.php?t=330037) + [21] [https://csrc.nist.gov](https://csrc.nist.gov/presentations/2024/nist-standards-on-random-numbers) + [22] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software) + [23] [https://www.aegissemi.com](https://www.aegissemi.com/post/understanding-trng-nist-standards-a-complete-guide-to-the-15-statistical-tests-for-true-random-numb) + [24] [https://search.proquest.com](https://search.proquest.com/openview/25e83cfec72c9869d21706ea0057d390/1?pq-origsite=gscholar&cbl=2043739) + [25] [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC13166014/) + + brainpool: algorithms: + dh: + description: !markdown > + The Diffie-Hellman (DH) Key Exchange is a method that lets two people create a shared secret key over an open, public network. They do this without ever sending the secret key to each other, making it safe from people who might be listening. [1, 2] + How It Works + + • Public Setup: Both users agree on two public numbers: a large prime number (p) and a base generator (g). + • Private Numbers: Each user picks a secret random number just for themselves (let's call them a and b). + • Public Key Math: They use math to turn their secret number and the public numbers into a new public key ($g^a \bmod p$ and $g^b \bmod p$). + • Key Exchange: They send these public results to each other over the network. + • Shared Secret: Each user takes the other person's public key, raises it to their own secret number, and arrives at the exact same final secret number. [3, 4, 5] + + Why It Matters + + • No Secret Sent: An eavesdropper can see the public numbers and public keys, but cannot figure out the private numbers or the final shared secret. + • Symmetric Prep: The final shared secret is then used as a key for fast, secure regular encryption (like AES) to chat or share data safely. [4, 6, 7] + + If you'd like, I can explain the math step-by-step with simple numbers, or talk about modern versions like Elliptic Curve Diffie-Hellman (ECDH). Let me know what you prefer! + AI responses may include mistakes. + + [1] https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim + [2] https://www.youtube.com/watch?v=KXq065YrpiU + [3] https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ + [4] https://www.geeksforgeeks.org/computer-networks/implementation-diffie-hellman-algorithm/ + [5] https://www.sciencedirect.com/topics/computer-science/diffie-hellman-key-exchange + [6] https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ + [7] https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b + + + rsa: uses: - signature @@ -101,16 +289,14 @@ algorithms: on a simple math rule: multiplying two large prime numbers is easy, but finding those original prime numbers back from the final product is very hard. - * Key Generation: The system picks two large prime numbers, multiplies them together, and uses the result to create a public key and a private key. + * Key Generation: The system picks two large prime numbers, multiplies them together, and uses the result to + create a public key and a private key. * Encryption: Anyone can use the receiver’s public key to turn a normal message into scrambled code (ciphertext). - * Decryption: Only the person with the secret private key can reverse the code and read the original message. [1, 5, 6] - - # Common Uses + * Decryption: Only the person with the secret private key can reverse the code and read the original + message. [1, 5, 6] - * Secure Web Traffic: Protecting data sent across HTTPS and SSL/TLS certificates. - * Digital Signatures: Proving that a message or software update really came from a trusted sender. - * Secure Logins: Used in protocols like SSH for remote computer access. [2, 3, 4, 7, 8] - citations: + # Common Uses + citations: !citations 1: https://www.geeksforgeeks.org/computer-networks/rsa-algorithm-cryptography/ 2: https://securew2.com/blog/what-is-rsa-asymmetric-encryption 3: https://www.splunk.com/en_us/blog/learn/rsa-algorithm-cryptography.html @@ -127,7 +313,32 @@ algorithms: parameters: g: type: point + name: Generator Point description: The generator point `G` on the elliptic curve. This point is used to generate the private key. + f: + type: field + name: Field + description: The field `F` of the elliptic curve. This is the set of numbers that the curve is defined over. + A field is either a prime or binary field. The field is the range of `0..x` + a: + type: integer + description: The `a` co-factor of the elliptic curve equation. The `a` is multiplied by the `x` value to + perform the linear portion of the curve. + b: + type: integer + description: The `b` co-factor of the elliptic curve equation. The `b` is multiplied by `x^2` to perform the + quadratic portion of the curve. + h: + name: Cofactor + type: float + description: The ratio of the total number of points on the curve to the order n, usually set to 1 for + optimal security. Anything less then 1 means that the number of bits expressed in the X value is less then + a 1:1 relationship to the number of private keys in the field. + n: + name: Order + type: positive_integer + description: The order of the elliptic curve. This is the number of points on the curve, + including the point at infinity. private_key: n: type: positive_integer @@ -161,21 +372,21 @@ algorithms: * Smaller Size: A 256-bit ECC key offers about the same security as a massive 3072-bit RSA key. * Less Power: Uses less battery, memory, and CPU power on small hardware. * Faster Speed: Sets up secure connections quicker than older systems. [5, 6, 10, 11] - - [1] https://www.ibm.com/docs/en/linux-on-systems?topic=apis-elliptic-curve-ecc-functions - [2] https://www.vmware.com/topics/elliptic-curve-cryptography - [3] https://www.hexnode.com/blogs/explained/what-is-elliptic-curve-cryptography-ecc/ - [4] https://cybertalents.com/blog/elliptic-curve-cryptography-ecc - [5] https://www.digicert.com/faq/cryptography/what-is-elliptic-curve-cryptography - [6] https://www.sectigo.com/blog/what-is-elliptic-curve-cryptography - [7] https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ - [8] https://www.ssldragon.com/blog/what-is-ecc-certificate/ - [9] https://www.expressvpn.com/glossary/elliptic-curve-cryptography/ - [10] https://www.keyfactor.com/blog/elliptic-curve-cryptography-what-is-it-how-does-it-work/ - [11] https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ - [12] https://nordvpn.com/blog/elliptic-curve-cryptography/ - [13] https://www.1kosmos.com/resources/security-glossary/elliptic-curve-cryptography - [14] https://www.twingate.com/blog/glossary/elliptic-curve-algorithm + citations: + 1: https://www.ibm.com/docs/en/linux-on-systems?topic=apis-elliptic-curve-ecc-functions + 2: https://www.vmware.com/topics/elliptic-curve-cryptography + 3: https://www.hexnode.com/blogs/explained/what-is-elliptic-curve-cryptography-ecc/ + 4: https://cybertalents.com/blog/elliptic-curve-cryptography-ecc + 5: https://www.digicert.com/faq/cryptography/what-is-elliptic-curve-cryptography + 6: https://www.sectigo.com/blog/what-is-elliptic-curve-cryptography + 7: https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ + 8: https://www.ssldragon.com/blog/what-is-ecc-certificate/ + 9: https://www.expressvpn.com/glossary/elliptic-curve-cryptography/ + 10: https://www.keyfactor.com/blog/elliptic-curve-cryptography-what-is-it-how-does-it-work/ + 11: https://www.ssl.com/article/what-is-elliptic-curve-cryptography-ecc/ + 12: https://nordvpn.com/blog/elliptic-curve-cryptography/ + 13: https://www.1kosmos.com/resources/security-glossary/elliptic-curve-cryptography + 14: https://www.twingate.com/blog/glossary/elliptic-curve-algorithm key_derivation: @@ -236,17 +447,77 @@ encryption: signature: dsa: description: !markdown > - Digital Signature Algorithm (DSA) is a digital signature scheme that provides secure authentication and integrity - for digital messages and documents. It is based on the mathematical difficulty of the discrete logarithm problem. - DSA is widely used in various security protocols and applications, including secure communication, digital - signatures, and key exchange. [3] - ecdsa: + The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, and anyone with the matching public key can check that the message is real and unchanged. [1, 2] + Key Generation + + • Choose prime numbers p and q, and a multiplier g. + • Pick a secret private key x. + • Compute public key $y = g^x \pmod p$. [3, 4] + + Signature Creation + + • Hash the message to get a number m. + • Pick a secret random number k. + • Calculate first signature part: $r = (g^k \pmod p) \pmod q$. + • Calculate second part: $s = k^{-1}(m + xr) \pmod q$. + • Output the signature pair (r, s). [5, 6] + + Signature Verification + + • Check that r and s are within correct number bounds. + • Re-hash the message and compute values using the public key y. + • Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] + + If you'd like, I can explain:How it compares to RSA or ECDSAWhy reusing a random number (k) breaks securityLet me know what you want to explore next. + AI responses may include mistakes. + citations: + [1] https://csrc.nist.rip/glossary/term/digital_signature_algorithm + [2] https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm + [3] http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html + [4] https://www.scribd.com/document/878063091/DSA-Steps-Explanation + [5] https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html + [6] https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi + [7] https://en.wikipedia.org/wiki/Digital_Signature_Algorithm + [8] https://www.youtube.com/watch?v=ANsg4wIQFn4 + [9] https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network + + +ecdsa: description: !markdown > - Elliptic Curve Digital Signature Algorithm (ECDSA) is a digital signature scheme that uses elliptic curve - cryptography. It provides secure authentication and integrity for digital messages and documents. ECDSA is - widely used in various security protocols and applications, including secure communication, digital signatures, - and key exchange. [6] - rsa: + The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, and anyone with the matching public key can check that the message is real and unchanged. [1, 2] + Key Generation + + • Choose prime numbers p and q, and a multiplier g. + • Pick a secret private key x. + • Compute public key $y = g^x \pmod p$. [3, 4] + + Signature Creation + + • Hash the message to get a number m. + • Pick a secret random number k. + • Calculate first signature part: $r = (g^k \pmod p) \pmod q$. + • Calculate second part: $s = k^{-1}(m + xr) \pmod q$. + • Output the signature pair (r, s). [5, 6] + + Signature Verification + + • Check that r and s are within correct number bounds. + • Re-hash the message and compute values using the public key y. + • Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] + + citations: + [1] https://csrc.nist.rip/glossary/term/digital_signature_algorithm + [2] https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm + [3] http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html + [4] https://www.scribd.com/document/878063091/DSA-Steps-Explanation + [5] https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html + [6] https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi + [7] https://en.wikipedia.org/wiki/Digital_Signature_Algorithm + [8] https://www.youtube.com/watch?v=ANsg4wIQFn4 + [9] https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network + + + rsa: description: !markdown > The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] Key Pair Components @@ -266,8 +537,7 @@ signature: • Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. • Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] - Would you like to explore how RSA key generation works mathematically or compare it with ECDSA? - AI responses may include mistakes. + citations: [1] https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ [2] https://cryptobook.nakov.com/digital-signatures/rsa-signatures @@ -282,23 +552,120 @@ signature: agreement: dh: description: !markdown > - Diffie-Hellman (DH) is a key exchange protocol that allows two parties to securely establish a shared secret - over an insecure communication channel. It relies on the mathematical difficulty of the discrete logarithm - problem. DH is widely used in various security protocols and applications, including secure communication, - key exchange, and digital signatures. [3] + The Diffie-Hellman (DH) key agreement algorithm is a foundational cryptographic protocol that allows two parties to establish a shared secret key over an insecure communication channel without explicitly transmitting the key itself. Published by Whitfield Diffie and Martin Hellman in 1976, it was the first practical implementation of public-key cryptography. Once the shared secret is calculated, it is typically passed to a key derivation function to generate symmetric keys for high-speed encryption algorithms like AES. [1, 2, 3, 4] + The Mathematical Framework + The security of the DH algorithm relies entirely on the mathematical complexity of the Discrete Logarithm Problem. While it is computationally easy to raise a number to a power modulo a prime, it is extremely difficult to reverse that operation and find the exponent if the numbers are sufficiently large. [5, 6] + The protocol relies on two public parameters: + + • p (Modulus): A very large, random prime number. + • g (Generator): A primitive root modulo p. [2, 7] + + Step-by-Step Process + + 1. Parameter Agreement: Alice and Bob publicly agree on a modulus p and a generator g. Eavesdroppers can see these values. + 2. Private Key Selection: Alice chooses a secret integer a, and Bob chooses a secret integer b. Neither party ever shares their private integer. + 3. Public Key Computation: + + • Alice computes her public key: $A = g^a \pmod p$. + • Bob computes his public key: $B = g^b \pmod p$. [10] + + 4. Public Key Exchange: Alice sends A to Bob, and Bob sends B to Alice across the insecure channel. + 5. Shared Secret Calculation: + + • Alice calculates the secret using Bob's public key: $S = B^a \pmod p$. + • Bob calculates the secret using Alice's public key: $S = A^b \pmod p$. [8, 10, 11, 12, 13] + + Both mathematical formulas yield the exact same value because modular exponentiation is commutative: $S = (g^b)^a \pmod p = (g^a)^b \pmod p = g^{ab} \pmod p$ + Strengths and Variants + + • Forward Secrecy: When implemented as Ephemeral Diffie-Hellman (DHE), new random keys are chosen for every single session. If a long-term master key is compromised in the future, attackers still cannot decrypt past recorded sessions. + • Elliptic Curve Diffie-Hellman (ECDH): A modern variant that uses the algebraic structure of elliptic curves instead of traditional modular arithmetic. It achieves the same level of security as standard DH but with significantly smaller key sizes, making it much faster and more efficient. [4, 14, 15, 16, 17] + + Core Limitation: No Authentication + The raw Diffie-Hellman protocol does not authenticate the identities of the communicating parties. Because of this flaw, it is fully vulnerable to a Man-in-the-Middle (MITM) attack. An attacker sitting between Alice and Bob can silently intercept the public keys, substitute their own, and establish separate shared secrets with both sides. To remain secure in real-world protocols like TLS/HTTPS and IPsec VPNs, DH must always be combined with an authentication mechanism, such as digital certificates or digital signatures. [1, 6, 9] + Would you like to explore how Elliptic Curve Diffie-Hellman (ECDH) reduces key sizes, or should we look at a code implementation of standard DH? + + citations: + [1] https://networklessons.com/miscellaneous/introduction-to-diffie-hellman-key-exchange + [2] https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b + [3] https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim + [4] https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/ + [5] https://www.youtube.com/watch?v=85oMrKd8afY + [6] https://polymesh.network/blog/the-diffie-hellman-key-exchange + [7] https://4js.com/online_documentation/fjs-fgl-manual-html/fgl-topics/c_gws_dh_algorithm.html + [8] https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ + [9] https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ + [10] https://security.stackexchange.com/questions/45963/diffie-hellman-key-exchange-in-plain-english + [11] https://eureka.patsnap.com/article/understanding-diffie-hellman-key-exchange-explained-simply + [12] https://labex.io/tutorials/linux-basic-key-exchange-with-diffie-hellman-in-cryptography-632720 + [13] https://eureka.patsnap.com/article/the-mathematics-behind-diffie-hellman-key-exchange + [14] https://www.ibm.com/docs/en/i/7.4.0?topic=q-calculate-diffie-hellman-secret-key-qc3calds-qc3calculatedhsecretkey + [15] https://wiki.openssl.org/index.php/Elliptic_Curve_Diffie_Hellman + [16] https://medium.com/@dipakkrdas/few-fundamental-cryptography-concepts-17aa1f6fe3ae + [17] https://medium.com/@sylvain.tiset/locks-and-fingerprints-part-1-how-encryption-keep-data-safe-d9911215c0a4 + + ecdh: description: !markdown > - Elliptic Curve Diffie-Hellman (ECDH) is a key exchange protocol that allows two parties to securely establish - a shared secret over an insecure communication channel. It is based on the mathematical difficulty of the - elliptic curve discrete logarithm problem. ECDH is widely used in various security protocols and applications, - including secure communication, key exchange, and digital signatures. [4] + The Elliptic Curve Diffie-Hellman (ECDH) algorithm is a modern security protocol. It lets two people create a shared secret key over an open, unsafe network. They use this secret key to lock and unlock private messages. It relies on the math of elliptic curves instead of large numbers. [1, 2] + How the Steps Work + + • Choose a public curve and a starting point (G) together. + • Pick a random secret number to act as your private key. + • Multiply your private key by the starting point to make your public key. + • Send your public key to the other person. + • Take the public key sent to you and multiply it by your own private key. + • Both people now share the exact same secret value. [1, 3, 4, 5, 6] + + Why People Use It + + • Small keys: It gives high security using tiny key sizes. + • Fast speed: It uses less computer power and memory. + • Safe data: Hackers cannot figure out the secret key just by watching the network. [1, 7, 8] + + If you'd like, I can explain:The math difference between normal Diffie-Hellman and ECDHWhat ECDHE (Ephemeral) means for forward safetyHow it is used in TLS or messaging apps + AI responses may include mistakes. + citations: !citations + 1: https://www.hexnode.com/blogs/explained/what-is-elliptic-curve-diffie-hellman-ecdh/ + 2: https://www.cardlogix.com/glossary/elliptic-curve-diffie-hellman-ecdh/ + 3: https://medium.com/swlh/understanding-ec-diffie-hellman-9c07be338d4a + 4: https://cryptobook.nakov.com/asymmetric-key-ciphers/ecdh-key-exchange + 5: https://thibautprobst.fr/en/posts/elliptic-curves/ + 6: https://ieeexplore.ieee.org/iel8/11414213/11414231/11414259.pdf + 7: https://www.youtube.com/watch?v=o9AdiGjOb_I + 8: https://medium.com/@mishraneeraj4/securing-data-with-ecdh-elliptic-curve-diffie-hellman-376afb7872ab + + ecdhe: description: !markdown > - Elliptic Curve Diffie-Hellman Ephemeral (ECDHE) is a key exchange protocol that allows two parties to securely - establish a shared secret over an insecure communication channel. It is based on the mathematical difficulty - of the elliptic curve discrete logarithm problem. ECDHE is widely used in various security protocols and - applications, including secure communication, key exchange, and digital signatures. [5] -hash_algorithms: + ECDHE stands for Elliptic Curve Diffie-Hellman Ephemeral. It is a secure key exchange protocol that allows two parties to create a shared secret key over an open network without sending the secret itself. It combines elliptic curve math with temporary keys to give high speed and forward privacy. [1, 2] + How ECDHE Works + + • Pick a Curve: Both sides agree on a specific elliptic curve and a base point on that curve. + • Make Key Pairs: Each side creates a random private number and multiplies it by the base point to get a public key. + • Trade Public Keys: The two sides swap their public keys over the network. + • Compute Secret: Each side combines the other side's public key with its own private number to arrive at the exact same shared secret number. [3, 4] + + Core Benefits + + • Ephemeral (Forward Secrecy): New temporary keys are made for every single session and then thrown away. If a server's main key is stolen later, old recorded sessions stay safe. + • Small Key Size: It offers the same security as older methods while using much smaller keys, which saves CPU power and network data. + • Widespread Use: It is a core security standard used inside modern web protocols like Transport Layer Security (TLS) to protect web traffic. [1, 9] + + If you'd like, I can explain:The math difference between standard Diffie-Hellman and elliptic curvesWhy X25519 is the preferred curve todayHow it handles quantum computer risksLet me know what you want to explore next. + AI responses may include mistakes. + citations: + 1: https://www.emergentmind.com/topics/elliptic-curve-diffie-hellman-ephemeral-ecdhe + 2: https://micsolutions.co.uk/2024/12/19/ecdhe/ + 3: https://medium.com/swlh/understanding-ec-diffie-hellman-9c07be338d4a + 4: https://www.cardlogix.com/glossary/elliptic-curve-diffie-hellman-ecdh/ + 5: https://www.qcecuring.com/education/cryptography-fundamentals/key-exchange-diffie-hellman-ecdhe + 6: https://www.cardlogix.com/glossary/elliptic-curve-diffie-hellman-ephemeral-ecdhe/ + 7: https://security.stackexchange.com/questions/14731/what-is-ecdhe-rsa + 8: https://www.youtube.com/watch?v=GOTIcxvYE94 + 9: https://www.linkedin.com/pulse/mathematics-behind-elliptic-curve-cryptography-secure-femerstrand-z3srf + + md5: description: MD5 is a widely used cryptographic hash function that produces a 128-bit (16-byte) hash value. lengths: @@ -704,73 +1071,3 @@ block_cypher_modes: [11] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation [12] https://dl.acm.org/doi/10.1145/937527.937529 [13] https://www.ibm.com/docs/en/linux-on-systems?topic=planning-cipher-mode-considerations - - -elliptic_curve: - anomalous: - safe: false - m-221: - safe: true - e-222: - safe: true - nist-secp224r1: - safe: false - curve25519: - safe: true - curve1174: - safe: true - field: prime - description: !markdown > - Curve1174 is a specific twisted Edwards elliptic curve used in elliptic-curve cryptography. It is defined over a - prime field and engineered to allow fast, secure, and unified point addition without exceptional cases, helping - developers build simple and side-channel-resistant cryptographic operations. [1, 2, 3, 4, 5] - Key Properties of Curve1174 - - • Form: Twisted Edwards curve equation x² + y² = 1 + d x² y² - • Parameter: Uses a specific non-square parameter d linked to the value 1174 modulo its prime. - • Purpose: Designed alongside curves like Curve25519 to provide high-security general-purpose cryptographic - protocols and efficient scalar multiplication. [3, 4, 6, 7] - citations: - 1: https://datatracker.ietf.org/doc/html/draft-josefsson-tls-additional-curves-01 - 2: https://www.johndcook.com/blog/2019/02/19/addition-on-curve1174/ - 3: https://www.johndcook.com/blog/2019/02/15/elliptic-curve-names/ - 4: https://eprint.iacr.org/2013/647.pdf - 5: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography - 6: https://safecurves.cr.yp.to/ind.html - 7: https://eprint.iacr.org/2013/647.pdf - bn254: - aliases: - - bn256 - - bn128 - - alt-bn128 - field: prime - libraries: - - ark_bn254 - uses: - - ethereum - - zk-snark - description: !markdown > - The BN(2,254) curve—widely known as BN254, BN256, or bn128—is a pairing-friendly elliptic curve in the - Barreto-Naehrig family defined over a 254-bit prime field. It is heavily used in zero-knowledge proofs and - blockchain protocols (such as Ethereum and Zcash) due to its efficient pairing operations. [1, 2, 3, 4] - - # Core Properties - - • Family: Barreto-Naehrig (BN) with an embedding degree of 12 - • Field size: Defined over a 254-bit prime scalar/base field - • Alternative names: , , - • Security level: Originally thought to offer roughly 128-bit security, but adjusted down to roughly 100-bit - security following advanced discrete logarithm attacks (Kim-Barbulescu algorithm). [1, 2, 3] - citations: - 1: https://github.com/nthparty/mclbn256 - 2: https://docs.rs/ark-bn254/latest/ark_bn254/ - 3: https://github.com/sedaprotocol/bn254 - 4: https://hackmd.io/@jpw/bn254 - 5: https://docs.rs/bn254/ - 6: https://billatnapier.medium.com/baby-jubjub-and-zero-knowledge-proofs-5d73cf250de3 - brainpoolP256t1: - nist-prime256v1: - scep256k1: - e-382: - m-383: - diff --git a/_data/curves.yaml b/_data/curves.yaml new file mode 100644 index 00000000..cd2c3674 --- /dev/null +++ b/_data/curves.yaml @@ -0,0 +1,72 @@ +--- +credits: + - rickmark + - https://std.neuromancer.sk +--- +anomalous: + safe: false +m-221: + safe: true +e-222: + safe: true +nist-secp224r1: + safe: false +curve25519: + safe: true +curve1174: + safe: true + field: prime + description: !markdown > + Curve1174 is a specific twisted Edwards elliptic curve used in elliptic-curve cryptography. It is defined over a + prime field and engineered to allow fast, secure, and unified point addition without exceptional cases, helping + developers build simple and side-channel-resistant cryptographic operations. [1, 2, 3, 4, 5] + Key Properties of Curve1174 + + • Form: Twisted Edwards curve equation x² + y² = 1 + d x² y² + • Parameter: Uses a specific non-square parameter d linked to the value 1174 modulo its prime. + • Purpose: Designed alongside curves like Curve25519 to provide high-security general-purpose cryptographic + protocols and efficient scalar multiplication. [3, 4, 6, 7] + citations: + 1: https://datatracker.ietf.org/doc/html/draft-josefsson-tls-additional-curves-01 + 2: https://www.johndcook.com/blog/2019/02/19/addition-on-curve1174/ + 3: https://www.johndcook.com/blog/2019/02/15/elliptic-curve-names/ + 4: https://eprint.iacr.org/2013/647.pdf + 5: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography + 6: https://safecurves.cr.yp.to/ind.html + 7: https://eprint.iacr.org/2013/647.pdf +bn254: + aliases: + - bn256 + - bn128 + - alt-bn128 + field: prime + libraries: + - ark_bn254 + uses: + - ethereum + - zk-snark + description: !markdown > + The BN(2,254) curve—widely known as BN254, BN256, or bn128—is a pairing-friendly elliptic curve in the + Barreto-Naehrig family defined over a 254-bit prime field. It is heavily used in zero-knowledge proofs and + blockchain protocols (such as Ethereum and Zcash) due to its efficient pairing operations. [1, 2, 3, 4] + + # Core Properties + + • Family: Barreto-Naehrig (BN) with an embedding degree of 12 + • Field size: Defined over a 254-bit prime scalar/base field + • Alternative names: , , + • Security level: Originally thought to offer roughly 128-bit security, but adjusted down to roughly 100-bit + security following advanced discrete logarithm attacks (Kim-Barbulescu algorithm). [1, 2, 3] + citations: + 1: https://github.com/nthparty/mclbn256 + 2: https://docs.rs/ark-bn254/latest/ark_bn254/ + 3: https://github.com/sedaprotocol/bn254 + 4: https://hackmd.io/@jpw/bn254 + 5: https://docs.rs/bn254/ + 6: https://billatnapier.medium.com/baby-jubjub-and-zero-knowledge-proofs-5d73cf250de3 +brainpoolP256t1: +nist-prime256v1: +scep256k1: +e-382: +m-383: + diff --git a/ext/std-curves b/ext/std-curves new file mode 160000 index 00000000..77fe6e35 --- /dev/null +++ b/ext/std-curves @@ -0,0 +1 @@ +Subproject commit 77fe6e3585ca2c2225b59d7df24b7c775437276f From 2816a219449dae6a8bf34ac809bc7c98930f6bfb Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Mon, 10 Aug 2026 20:08:33 -0700 Subject: [PATCH 3/7] Crypto intermediate progress --- _data/cryptography.yml | 72 +++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/_data/cryptography.yml b/_data/cryptography.yml index 478f7315..6c25a2fb 100644 --- a/_data/cryptography.yml +++ b/_data/cryptography.yml @@ -471,15 +471,15 @@ signature: If you'd like, I can explain:How it compares to RSA or ECDSAWhy reusing a random number (k) breaks securityLet me know what you want to explore next. AI responses may include mistakes. citations: - [1] https://csrc.nist.rip/glossary/term/digital_signature_algorithm - [2] https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm - [3] http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html - [4] https://www.scribd.com/document/878063091/DSA-Steps-Explanation - [5] https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html - [6] https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi - [7] https://en.wikipedia.org/wiki/Digital_Signature_Algorithm - [8] https://www.youtube.com/watch?v=ANsg4wIQFn4 - [9] https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network + 1: https://csrc.nist.rip/glossary/term/digital_signature_algorithm + 2: https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm + 3: http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html + 4: https://www.scribd.com/document/878063091/DSA-Steps-Explanation + 5: https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html + 6: https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi + 7: https://en.wikipedia.org/wiki/Digital_Signature_Algorithm + 8: https://www.youtube.com/watch?v=ANsg4wIQFn4 + 9: https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network ecdsa: @@ -518,35 +518,35 @@ ecdsa: rsa: - description: !markdown > - The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] - Key Pair Components - - • Public Key: Consists of the modulus n and the public exponent e, used to verify signatures. - • Private Key: Consists of the modulus n and the private exponent d, kept secret and used to generate signatures. [2, 5] - - Signature Generation (Signing) - - • Compute the hash value of the message: h = hash(msg). - • Raise the hash to the power of the private exponent d modulo n to create the signature: $s = h^d \pmod n$. - • Send the signature along with the original message. [2, 4, 6] - - Signature Verification - - • Compute the hash value of the received message: h = hash(msg). - • Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. - • Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] + description: !markdown > + The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] + Key Pair Components + + • Public Key: Consists of the modulus n and the public exponent e, used to verify signatures. + • Private Key: Consists of the modulus n and the private exponent d, kept secret and used to generate signatures. [2, 5] + + Signature Generation (Signing) + + • Compute the hash value of the message: h = hash(msg). + • Raise the hash to the power of the private exponent d modulo n to create the signature: $s = h^d \pmod n$. + • Send the signature along with the original message. [2, 4, 6] + + Signature Verification + + • Compute the hash value of the received message: h = hash(msg). + • Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. + • Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] - citations: + citations: - [1] https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ - [2] https://cryptobook.nakov.com/digital-signatures/rsa-signatures - [3] https://www.encryptionconsulting.com/education-center/what-is-rsa/ - [4] https://www.youtube.com/watch?v=TeuKV5kHLyQ - [5] https://en.wikipedia.org/wiki/RSA_cryptosystem - [6] https://securew2.com/blog/what-is-rsa-asymmetric-encryption - [7] https://cryptobook.nakov.com/digital-signatures/rsa-signatures - [8] https://students.cs.byu.edu/~cs465ta/lectures/rsa_notes.pdf + [1] https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ + [2] https://cryptobook.nakov.com/digital-signatures/rsa-signatures + [3] https://www.encryptionconsulting.com/education-center/what-is-rsa/ + [4] https://www.youtube.com/watch?v=TeuKV5kHLyQ + [5] https://en.wikipedia.org/wiki/RSA_cryptosystem + [6] https://securew2.com/blog/what-is-rsa-asymmetric-encryption + [7] https://cryptobook.nakov.com/digital-signatures/rsa-signatures + [8] https://students.cs.byu.edu/~cs465ta/lectures/rsa_notes.pdf agreement: From f9f9263fe9bbacd261dfb35f84c6d795aae4c1b4 Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Mon, 10 Aug 2026 20:29:38 -0700 Subject: [PATCH 4/7] Crypto intermediate progress --- .idea/dictionaries/project.xml | 1 + _data/cryptography.yml | 13 ++++++++ _data/curves.yaml | 58 +++++++++++++++++++++++++++++++++- 3 files changed, 71 insertions(+), 1 deletion(-) diff --git a/.idea/dictionaries/project.xml b/.idea/dictionaries/project.xml index 879000e4..f426888f 100644 --- a/.idea/dictionaries/project.xml +++ b/.idea/dictionaries/project.xml @@ -10,6 +10,7 @@ multibases multihashes pathutil + secp theiphonewiki tipw typhoeus diff --git a/_data/cryptography.yml b/_data/cryptography.yml index 6c25a2fb..cd19553c 100644 --- a/_data/cryptography.yml +++ b/_data/cryptography.yml @@ -109,6 +109,19 @@ types: positive_prime: derived_from: positive_integer positive_integer: + +cipher_suites: + TLS_ECDH_ECDSA_WITH_NULL_SHA: + TLS_ECDH_ECDSA_WITH_RC4_128_SHA: + TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA: + TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA: + TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA: + TLS_ECDH_RSA_WITH_NULL_SHA: + TLS_ECDH_RSA_WITH_RC4_128_SHA: + TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA: + TLS_ECDH_RSA_WITH_AES_128_CBC_SHA: + TLS_ECDH_RSA_WITH_AES_256_CBC_SHA: + rng: ansi-x9.62: description: !markdown > diff --git a/_data/curves.yaml b/_data/curves.yaml index cd2c3674..24640f3a 100644 --- a/_data/curves.yaml +++ b/_data/curves.yaml @@ -69,4 +69,60 @@ nist-prime256v1: scep256k1: e-382: m-383: - +sect163k1: + aliases: + - NIST K-163 +sect163r1: +sect163r2: + aliases: + - NIST B-163 +sect193r1: +sect193r2: +sect233k1: + aliases: + - NIST K-233 +sect233r1: + aliases: + - NIST B-233 +sect239k1: +sect283k1: + aliases: + - NIST K-283 +sect283r1: + aliases: + - NIST B-283 +sect409k1: + aliases: + - NIST K-409 +sect409r1: + aliases: + - NIST B-409 +sect571k1: + aliases: + - NIST K-571 +sect571r1: + aliases: + - NIST B-571 +secp160k1: +secp160r1: +secp160r2: +secp192k1: +secp192r1: + aliases: + - prime192v1 + - NIST P-192 +secp224k1: +secp224r1: + aliases: + - NIST P-224 +secp256k1: +secp256r1: + aliases: + - prime256v1 + - NIST P-256 +secp384r1: + aliases: + - NIST P-384 +secp521r1: + aliases: + - NIST P-521 From 92ca4f2b4d3e6ba65d8de480c7ff28bef26df35a Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Mon, 10 Aug 2026 20:51:08 -0700 Subject: [PATCH 5/7] Format updates --- _data/cryptography.yml | 977 ++++++++++++++++++++++------------------- 1 file changed, 530 insertions(+), 447 deletions(-) diff --git a/_data/cryptography.yml b/_data/cryptography.yml index cd19553c..f4a6b2e3 100644 --- a/_data/cryptography.yml +++ b/_data/cryptography.yml @@ -30,16 +30,16 @@ types: # Core Properties of GF(p) - • Elements: The field consists of integers $\{0, 1, 2, \dots, p-1\}$. - • Addition & Subtraction: Computed modulo p. - • Multiplication: Computed modulo p. - • Inverses: Every non-zero element has a unique multiplicative inverse because p is prime. [1, 5, 6] + * Elements: The field consists of integers $\{0, 1, 2, \dots, p-1\}$. + * Addition & Subtraction: Computed modulo p. + * Multiplication: Computed modulo p. + * Inverses: Every non-zero element has a unique multiplicative inverse because p is prime. [1, 5, 6] # Working with Prime Fields in GP/PARI - • Integers modulo p: Use to perform basic arithmetic rings/fields. For instance, returns . - • Defining via : You can initialize a prime field element or generator using where p is prime. - • Polynomial roots (): Find roots of polynomials over a prime field by passing the prime p as a domain + * Integers modulo p: Use to perform basic arithmetic rings/fields. For instance, returns . + * Defining via : You can initialize a prime field element or generator using where p is prime. + * Polynomial roots (): Find roots of polynomials over a prime field by passing the prime p as a domain argument, such as . [7, 8, 9] citations: !citations @@ -135,146 +135,162 @@ rng: * Origin: Defined in ANSI X9.62-1998 Annex A.4 (). * Purpose: Designed to supply cryptographically secure random values specifically for ECDSA operations. * Current Status: Retired and deprecated by NIST under SP 800-131A guidelines. - * Reason for Retirement: Advances in cryptanalysis and modern security requirements rendered legacy 1998-era designs like X9.62 and X9.31 vulnerable or insufficient compared to modern Deterministic Random Bit Generators (DRBGs) like CTR_DRBG or Hash_DRBG. [1, 2, 4, 5] + * Reason for Retirement: Advances in cryptanalysis and modern security requirements rendered legacy 1998-era + designs like X9.62 and X9.31 vulnerable or insufficient compared to modern Deterministic Random Bit Generators + (DRBGs) like CTR_DRBG or Hash_DRBG. [1, 2, 4, 5] # Technical Context - * Function: Relied on internal state updates combined with secret/seed values (requiring roughly 20 to 64 bytes of seed material depending on implementation details). - * Replacements: Modern standards transitioned toward NIST SP 800-90A DRBGs (such as HMAC-DRBG, Hash-DRBG, and CTR-DRBG) for all cryptographic randomness. [4, 8, 9] + * Function: Relied on internal state updates combined with secret/seed values (requiring roughly 20 to 64 bytes + of seed material depending on implementation details). + * Replacements: Modern standards transitioned toward NIST SP 800-90A DRBGs (such as HMAC-DRBG, Hash-DRBG, and + CTR-DRBG) for all cryptographic randomness. [4, 8, 9] citations: - [1] https://cseweb.ucsd.edu/classes/fa21/cse107-a/slides/18-rngs.pdf - [2] https://csrc.nist.rip/projects/Cryptographic-Algorithm-Validation-Program/Validation-Notes - [3] https://csrc.nist.rip/projects/cryptographic-algorithm-validation-program/validation-notes - [4] https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/retired-testing - [5] https://csrc.nist.rip/library/NIST%20FIPS%20140-2%20Security%20Requirements%20for%20Cryptographic%20Modules,%20Annex%20C;%20Approved%20Random%20Number%20Generators,%202001-03%20(2009%20Minor%20Edits).pdf - [6] https://icmconference.org/wp-content/uploads/C14WangZ-and-TungW.pdf - [7] https://security.stackexchange.com/questions/185520/what-is-the-format-of-an-x9-62-key - [8] https://opentitan.org/book/hw/ip/csrng/ - [9] https://pmc.ncbi.nlm.nih.gov/articles/PMC9689501/ + 1: https://cseweb.ucsd.edu/classes/fa21/cse107-a/slides/18-rngs.pdf + 2: https://csrc.nist.rip/projects/Cryptographic-Algorithm-Validation-Program/Validation-Notes + 3: https://csrc.nist.rip/projects/cryptographic-algorithm-validation-program/validation-notes + 4: https://csrc.nist.gov/projects/cryptographic-algorithm-validation-program/retired-testing + 5: https://csrc.nist.rip/library/NIST%20FIPS%20140-2%20Security%20Requirements%20for%20Cryptographic%20Modules,%20Annex%20C;%20Approved%20Random%20Number%20Generators,%202001-03%20(2009%20Minor%20Edits).pdf + 6: https://icmconference.org/wp-content/uploads/C14WangZ-and-TungW.pdf + 7: https://security.stackexchange.com/questions/185520/what-is-the-format-of-an-x9-62-key + 8: https://opentitan.org/book/hw/ip/csrng/ + 9: https://pmc.ncbi.nlm.nih.gov/articles/PMC9689501/ secg: description: !markdown > - The SECG generation and validation methods for verifiably random elliptic curve domain parameters align with ANSI X9.62 and are detailed in the Standards for Efficient Cryptography Group specifications. These parameters define standard curves used across cryptography. [1, 2, 3] - Overview of SECG Parameter Generation + The SECG generation and validation methods for verifiably random elliptic curve domain parameters align with + ANSI X9.62 and are detailed in the Standards for Efficient Cryptography Group specifications. These parameters + define standard curves used across cryptography. [1, 2, 3] + + # Overview of SECG Parameter Generation - • Verifiably Random Basis: Curves are created using a fixed seed so anyone can re-verify the derivation process. - • Compatibility: The procedures match historical ANSI X9.62 and IEEE 1363 standards. - • Naming Conventions: Resulting curves in SEC 2 use prefixes like for prime fields and for binary fields. [1, 4, 5, 6, 7] + * Verifiably Random Basis: Curves are created using a fixed seed so anyone can re-verify the derivation process. + * Compatibility: The procedures match historical ANSI X9.62 and IEEE 1363 standards. + * Naming Conventions: Resulting curves in SEC 2 use prefixes like for prime fields and for binary + fields. [1, 4, 5, 6, 7] Validation and Use - • Domain Verification: Implementers validate unknown parameters using specified checks to ensure safety before active deployment. - • Standard Recommendations: Using pre-generated named parameters avoids slow, error-prone custom curve creation. [3] + * Domain Verification: Implementers validate unknown parameters using specified checks to ensure safety + before active deployment. + * Standard Recommendations: Using pre-generated named parameters avoids slow, error-prone custom curve + creation. [3] citations: - - [1] https://dissect.crocs.fi.muni.cz/standards/secg - [2] https://www.secg.org/ - [3] https://en.wikipedia.org/wiki/Elliptic-curve_cryptography - [4] https://is.muni.cz/th/maq0p/sbapr_final_digital.pdf - [5] https://dissect.crocs.fi.muni.cz/standards/x962 - [6] https://std.neuromancer.sk/methods/secg/ - [7] https://www.johndcook.com/blog/2018/08/21/a-tale-of-two-elliptic-curves/ + 1: https://dissect.crocs.fi.muni.cz/standards/secg + 2: https://www.secg.org/ + 3: https://en.wikipedia.org/wiki/Elliptic-curve_cryptography + 4: https://is.muni.cz/th/maq0p/sbapr_final_digital.pdf + 5: https://dissect.crocs.fi.muni.cz/standards/x962 + 6: https://std.neuromancer.sk/methods/secg/ + 7: https://www.johndcook.com/blog/2018/08/21/a-tale-of-two-elliptic-curves/ nist: description: !markdown > - The term NIST DRNG usually refers to NIST DRBG (Deterministic Random Bit Generator), which is the official technical term used by the National Institute of Standards and Technology (NIST) for a cryptographically secure pseudorandom number generator (PRNG). [1, 2] - It can also refer to a physical Digital Random Number Generator (such as Intel's hardware-based DRNG architecture) designed to comply with NIST's rigid cryptographic standards. [3, 4, 5] - ------------------------------ + The term NIST DRNG usually refers to NIST DRBG (Deterministic Random Bit Generator), which is the official + technical term used by the National Institute of Standards and Technology (NIST) for a cryptographically secure + pseudorandom number generator (PRNG). [1, 2] + + It can also refer to a physical Digital Random Number Generator (such as Intel's hardware-based DRNG + architecture) designed to comply with NIST's rigid cryptographic standards. [3, 4, 5] + ## The NIST SP 800-90 Core Standards - NIST regulates random number generation through the SP 800-90 series, which dictates how secure random numbers must be processed, seeded, and tested: [2, 6, 7, 8] + NIST regulates random number generation through the SP 800-90 series, which dictates how secure random + numbers must be processed, seeded, and tested: [2, 6, 7, 8] - * - * [SP 800-90A](https://csrc.nist.gov/projects/random-bit-generation): Specifies the approved deterministic algorithms (DRBGs) used to expand a highly random mathematical "seed" into a stream of secure cryptographic bits. - * SP 800-90B: Outlines the rules for the underlying physical entropy sources (the raw noise source providing true randomness). - * [SP 800-90C](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c): Establishes construction standards for combining the entropy source and the DRBG mechanism together seamlessly. [1, 2, 6, 9, 10] - * + * [SP 800-90A](https://csrc.nist.gov/projects/random-bit-generation): Specifies the approved deterministic + algorithms (DRBGs) used to expand a highly random mathematical "seed" into a stream of secure + cryptographic bits. + * SP 800-90B: Outlines the rules for the underlying physical entropy sources (the raw noise source providing + true randomness). + * [SP 800-90C](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c): Establishes construction standards + for combining the entropy source and the DRBG mechanism together seamlessly. [1, 2, 6, 9, 10] ## Approved NIST DRBG Mechanisms - When designing a software or hardware system to meet NIST compliance, developers must choose from three currently approved cryptographic mechanisms defined in SP 800-90A: [11, 12] + When designing a software or hardware system to meet NIST compliance, developers must choose from three + currently approved cryptographic mechanisms defined in SP 800-90A: [11, 12] - * * CTR_DRBG: Built on symmetric block ciphers like AES in counter mode. * Hash_DRBG: Built on secure cryptographic hash functions like SHA-256. * HMAC_DRBG: Built on Hash-based Message Authentication Codes. [11, 13] - * - - (Note: An older standard, Dual_EC_DRBG, was formally withdrawn and banned by NIST after it was discovered to contain a potential backdoor). [11, 14] + + (Note: An older standard, Dual_EC_DRBG, was formally withdrawn and banned by NIST after it was discovered + to contain a potential backdoor). [11, 14] + ## Hardware Implementations (Intel & AMD DRNG) - In hardware architectures, a "DRNG" framework typically bundles an on-chip True Random Number Generator (TRNG) with a deterministic circuit. For example, Intel's onboard architecture uses a physical thermal noise source to consistently feed a NIST-compliant CTR_DRBG. Software applications then access these random pools using assembly commands: [3, 15, 16, 17] - - * + In hardware architectures, a "DRNG" framework typically bundles an on-chip True Random Number Generator (TRNG) + with a deterministic circuit. For example, Intel's onboard architecture uses a physical thermal noise source to + consistently feed a NIST-compliant CTR_DRBG. Software applications then access these random pools using assembly + commands: [3, 15, 16, 17] + * RDRAND: Pulls pseudorandom data directly out of the internal DRBG engine. - * RDSEED: Pulls raw, high-entropy bits straight from the conditioning hardware to seed other software-based PRNGs. [3, 15, 18, 19, 20] - * - + * RDSEED: Pulls raw, high-entropy bits straight from the conditioning hardware to seed other + software-based PRNGs. [3, 15, 18, 19, 20] + ## Testing for Compliance - To verify that a DRNG functions correctly without predictability or bias, developers evaluate its outputs using the [NIST Statistical Test Suite (SP 800-22)](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software). This suite subjects output bitstreams to 15 distinct frequency, pattern, and matrix mathematical tests to spot hidden statistical anomalies. [21, 22, 23, 24, 25] - ------------------------------ - If you are implementing or auditing a random number generator, let me know: - - * - * Are you working on a software application or a hardware/firmware implementation? - * Do you need help choosing a specific cryptographic algorithm (like AES-CTR vs. SHA-256)? - * Are you prepping a module for FIPS 140-3 validation? - * - + To verify that a DRNG functions correctly without predictability or bias, developers evaluate its outputs + using the [NIST Statistical Test Suite (SP 800-22)](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software). + This suite subjects output bitstreams to 15 distinct frequency, pattern, and matrix mathematical tests to spot + hidden statistical anomalies. [21, 22, 23, 24, 25] + citations: - [1] [https://csrc.nist.gov](https://csrc.nist.gov/glossary/term/deterministic_random_bit_generator) - [2] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) - [3] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E306_PublicUse.pdf) - [4] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E72_PublicUse.pdf) - [5] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E232_PublicUse.pdf) - [6] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) - [7] [https://lightshipsec.com](https://lightshipsec.com/nist-800-90b-concepts/) - [8] [https://en-support.renesas.com](https://en-support.renesas.com/knowledgeBase/22372154) - [9] [https://csrc.nist.gov](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c) - [10] [https://www.nist.gov](https://www.nist.gov/publications/recommendation-random-bit-generator-rbg-constructions) - [11] [https://en.wikipedia.org](https://en.wikipedia.org/wiki/NIST_SP_800-90A) - [12] [https://postquantum.com](https://postquantum.com/post-quantum/qrng-buyers-guide/) - [13] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp3401.pdf) - [14] [https://csrc.nist.rip](https://csrc.nist.rip/publications/nistpubs/800-90A/SP800-90A.pdf) - [15] [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E233_PublicUse.pdf) - [16] [https://www.ingeniars.com](https://www.ingeniars.com/in_product/rng-ip-core/) - [17] [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC11675632/) - [18] [https://security.stackexchange.com](https://security.stackexchange.com/questions/195515/is-rdrand-used-in-a-safe-way-by-windows-10) - [19] [https://www.linuxjournal.com](https://www.linuxjournal.com/content/amd-confirms-zen-5-rng-flaw-when-random-isnt-random-enough) - [20] [https://forums.raspberrypi.com](https://forums.raspberrypi.com/viewtopic.php?t=330037) - [21] [https://csrc.nist.gov](https://csrc.nist.gov/presentations/2024/nist-standards-on-random-numbers) - [22] [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software) - [23] [https://www.aegissemi.com](https://www.aegissemi.com/post/understanding-trng-nist-standards-a-complete-guide-to-the-15-statistical-tests-for-true-random-numb) - [24] [https://search.proquest.com](https://search.proquest.com/openview/25e83cfec72c9869d21706ea0057d390/1?pq-origsite=gscholar&cbl=2043739) - [25] [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC13166014/) + 1: [https://csrc.nist.gov](https://csrc.nist.gov/glossary/term/deterministic_random_bit_generator) + 2: [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) + 3: [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E306_PublicUse.pdf) + 4: [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E72_PublicUse.pdf) + 5: [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E232_PublicUse.pdf) + 6: [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation) + 7: [https://lightshipsec.com](https://lightshipsec.com/nist-800-90b-concepts/) + 8: [https://en-support.renesas.com](https://en-support.renesas.com/knowledgeBase/22372154) + 9: [https://csrc.nist.gov](https://csrc.nist.gov/News/2025/nist-publishes-sp-800-90c) + 10: [https://www.nist.gov](https://www.nist.gov/publications/recommendation-random-bit-generator-rbg-constructions) + 11: [https://en.wikipedia.org](https://en.wikipedia.org/wiki/NIST_SP_800-90A) + 12: [https://postquantum.com](https://postquantum.com/post-quantum/qrng-buyers-guide/) + 13: [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp3401.pdf) + 14: [https://csrc.nist.rip](https://csrc.nist.rip/publications/nistpubs/800-90A/SP800-90A.pdf) + 15: [https://csrc.nist.gov](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/entropy/E233_PublicUse.pdf) + 16: [https://www.ingeniars.com](https://www.ingeniars.com/in_product/rng-ip-core/) + 17: [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC11675632/) + 18: [https://security.stackexchange.com](https://security.stackexchange.com/questions/195515/is-rdrand-used-in-a-safe-way-by-windows-10) + 19: [https://www.linuxjournal.com](https://www.linuxjournal.com/content/amd-confirms-zen-5-rng-flaw-when-random-isnt-random-enough) + 20: [https://forums.raspberrypi.com](https://forums.raspberrypi.com/viewtopic.php?t=330037) + 21: [https://csrc.nist.gov](https://csrc.nist.gov/presentations/2024/nist-standards-on-random-numbers) + 22: [https://csrc.nist.gov](https://csrc.nist.gov/projects/random-bit-generation/documentation-and-software) + 23: [https://www.aegissemi.com](https://www.aegissemi.com/post/understanding-trng-nist-standards-a-complete-guide-to-the-15-statistical-tests-for-true-random-numb) + 24: [https://search.proquest.com](https://search.proquest.com/openview/25e83cfec72c9869d21706ea0057d390/1?pq-origsite=gscholar&cbl=2043739) + 25: [https://pmc.ncbi.nlm.nih.gov](https://pmc.ncbi.nlm.nih.gov/articles/PMC13166014/) brainpool: algorithms: dh: description: !markdown > - The Diffie-Hellman (DH) Key Exchange is a method that lets two people create a shared secret key over an open, public network. They do this without ever sending the secret key to each other, making it safe from people who might be listening. [1, 2] - How It Works - - • Public Setup: Both users agree on two public numbers: a large prime number (p) and a base generator (g). - • Private Numbers: Each user picks a secret random number just for themselves (let's call them a and b). - • Public Key Math: They use math to turn their secret number and the public numbers into a new public key ($g^a \bmod p$ and $g^b \bmod p$). - • Key Exchange: They send these public results to each other over the network. - • Shared Secret: Each user takes the other person's public key, raises it to their own secret number, and arrives at the exact same final secret number. [3, 4, 5] - - Why It Matters - - • No Secret Sent: An eavesdropper can see the public numbers and public keys, but cannot figure out the private numbers or the final shared secret. - • Symmetric Prep: The final shared secret is then used as a key for fast, secure regular encryption (like AES) to chat or share data safely. [4, 6, 7] - - If you'd like, I can explain the math step-by-step with simple numbers, or talk about modern versions like Elliptic Curve Diffie-Hellman (ECDH). Let me know what you prefer! - AI responses may include mistakes. + The Diffie-Hellman (DH) Key Exchange is a method that lets two people create a shared secret key over an open, + public network. They do this without ever sending the secret key to each other, making it safe from people who + might be listening. [1, 2] + + # How It Works - [1] https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim - [2] https://www.youtube.com/watch?v=KXq065YrpiU - [3] https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ - [4] https://www.geeksforgeeks.org/computer-networks/implementation-diffie-hellman-algorithm/ - [5] https://www.sciencedirect.com/topics/computer-science/diffie-hellman-key-exchange - [6] https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ - [7] https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b + * Public Setup: Both users agree on two public numbers: a large prime number (p) and a base generator (g). + * Private Numbers: Each user picks a secret random number just for themselves (let's call them a and b). + * Public Key Math: They use math to turn their secret number and the public numbers into a new public key + ($g^a \bmod p$ and $g^b \bmod p$). + * Key Exchange: They send these public results to each other over the network. + * Shared Secret: Each user takes the other person's public key, raises it to their own secret number, and arrives + at the exact same final secret number. [3, 4, 5] + # Why It Matters + * No Secret Sent: An eavesdropper can see the public numbers and public keys, but cannot figure out the private + numbers or the final shared secret. + * Symmetric Prep: The final shared secret is then used as a key for fast, secure regular encryption (like AES) + to chat or share data safely. [4, 6, 7] + citations: + 1: https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim + 2: https://www.youtube.com/watch?v=KXq065YrpiU + 3: https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ + 4: https://www.geeksforgeeks.org/computer-networks/implementation-diffie-hellman-algorithm/ + 5: https://www.sciencedirect.com/topics/computer-science/diffie-hellman-key-exchange + 6: https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ + 7: https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b rsa: uses: @@ -308,7 +324,6 @@ algorithms: * Decryption: Only the person with the secret private key can reverse the code and read the original message. [1, 5, 6] - # Common Uses citations: !citations 1: https://www.geeksforgeeks.org/computer-networks/rsa-algorithm-cryptography/ 2: https://securew2.com/blog/what-is-rsa-asymmetric-encryption @@ -378,7 +393,8 @@ algorithms: * Generator Point: A specific starting point (G) on the curve agreed upon by both users. * Private Key: A random number picked in secret by the user. * Public Key: Found by adding the generator point to itself over and over using the private key number. - * One-Way Math: It is easy to multiply the points forward, but nearly impossible to guess the private key backwards (known as the Elliptic Curve Discrete Logarithm Problem). [4, 6, 7, 8, 9] + * One-Way Math: It is easy to multiply the points forward, but nearly impossible to guess the private key + backwards (known as the Elliptic Curve Discrete Logarithm Problem). [4, 6, 7, 8, 9] # Key Benefits @@ -432,7 +448,8 @@ encryption: * Multiply them to find the modulus n = p × q. * Compute Euler's totient function: φ(n) = (p - 1)(q - 1). * Choose an integer e (the public exponent) such that 1 < e < φ(n) and e is coprime to φ(n). - * Calculate d (the private exponent) as the modular multiplicative inverse of e modulo φ(n), meaning $(d \times e) \pmod{\phi(n)} = 1$. + * Calculate d (the private exponent) as the modular multiplicative inverse of e modulo φ(n), meaning + $(d \times e) \pmod{\phi(n)} = 1$. * Public Key: (n, e) (shared with everyone). * Private Key: (n, d) (kept secret). [1, 4, 5] @@ -460,29 +477,30 @@ encryption: signature: dsa: description: !markdown > - The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, and anyone with the matching public key can check that the message is real and unchanged. [1, 2] - Key Generation + The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular + exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, + and anyone with the matching public key can check that the message is real and unchanged. [1, 2] - • Choose prime numbers p and q, and a multiplier g. - • Pick a secret private key x. - • Compute public key $y = g^x \pmod p$. [3, 4] + # Key Generation - Signature Creation + * Choose prime numbers p and q, and a multiplier g. + * Pick a secret private key x. + * Compute public key $y = g^x \pmod p$. [3, 4] - • Hash the message to get a number m. - • Pick a secret random number k. - • Calculate first signature part: $r = (g^k \pmod p) \pmod q$. - • Calculate second part: $s = k^{-1}(m + xr) \pmod q$. - • Output the signature pair (r, s). [5, 6] + # Signature Creation - Signature Verification + * Hash the message to get a number m. + * Pick a secret random number k. + * Calculate first signature part: $r = (g^k \pmod p) \pmod q$. + * Calculate second part: $s = k^{-1}(m + xr) \pmod q$. + * Output the signature pair (r, s). [5, 6] - • Check that r and s are within correct number bounds. - • Re-hash the message and compute values using the public key y. - • Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] + # Signature Verification - If you'd like, I can explain:How it compares to RSA or ECDSAWhy reusing a random number (k) breaks securityLet me know what you want to explore next. - AI responses may include mistakes. + * Check that r and s are within correct number bounds. + * Re-hash the message and compute values using the public key y. + * Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] + citations: 1: https://csrc.nist.rip/glossary/term/digital_signature_algorithm 2: https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm @@ -497,147 +515,175 @@ signature: ecdsa: description: !markdown > - The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, and anyone with the matching public key can check that the message is real and unchanged. [1, 2] - Key Generation + The Digital Signature Algorithm (DSA) is a federal standard for digital signatures based on modular + exponentiation and the discrete logarithm problem. It lets a sender sign a message with a private key, + and anyone with the matching public key can check that the message is real and unchanged. [1, 2] + + # Key Generation - • Choose prime numbers p and q, and a multiplier g. - • Pick a secret private key x. - • Compute public key $y = g^x \pmod p$. [3, 4] + * Choose prime numbers p and q, and a multiplier g. + * Pick a secret private key x. + * Compute public key $y = g^x \pmod p$. [3, 4] Signature Creation - • Hash the message to get a number m. - • Pick a secret random number k. - • Calculate first signature part: $r = (g^k \pmod p) \pmod q$. - • Calculate second part: $s = k^{-1}(m + xr) \pmod q$. - • Output the signature pair (r, s). [5, 6] + * Hash the message to get a number m. + * Pick a secret random number k. + * Calculate first signature part: $r = (g^k \pmod p) \pmod q$. + * Calculate second part: $s = k^{-1}(m + xr) \pmod q$. + * Output the signature pair (r, s). [5, 6] Signature Verification - • Check that r and s are within correct number bounds. - • Re-hash the message and compute values using the public key y. - • Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] + * Check that r and s are within correct number bounds. + * Re-hash the message and compute values using the public key y. + * Confirm the math checks out to prove the signature is valid. [4, 7, 8, 9] citations: - [1] https://csrc.nist.rip/glossary/term/digital_signature_algorithm - [2] https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm - [3] http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html - [4] https://www.scribd.com/document/878063091/DSA-Steps-Explanation - [5] https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html - [6] https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi - [7] https://en.wikipedia.org/wiki/Digital_Signature_Algorithm - [8] https://www.youtube.com/watch?v=ANsg4wIQFn4 - [9] https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network + 1: https://csrc.nist.rip/glossary/term/digital_signature_algorithm + 2: https://www.simplilearn.com/tutorials/cryptography-tutorial/digital-signature-algorithm + 3: http://shainer.github.io/crypto/python/matasano/2016/10/07/dsa.html + 4: https://www.scribd.com/document/878063091/DSA-Steps-Explanation + 5: https://di-mgt.com.au/public-key-crypto-discrete-logs-4-dsa.html + 6: https://dev.to/me_jessicahowe/what-is-a-digital-signature-algorithm-dsa-4kpi + 7: https://en.wikipedia.org/wiki/Digital_Signature_Algorithm + 8: https://www.youtube.com/watch?v=ANsg4wIQFn4 + 9: https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network rsa: description: !markdown > - The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] - Key Pair Components + The RSA signature algorithm is an asymmetric cryptographic scheme used to authenticate the origin of digital + messages or documents. It works by using a private key to mathematically "sign" a message hash, which anyone + with the corresponding public key can verify to prove authenticity and detect tampering. [1, 2, 3, 4] + + # Key Pair Components - • Public Key: Consists of the modulus n and the public exponent e, used to verify signatures. - • Private Key: Consists of the modulus n and the private exponent d, kept secret and used to generate signatures. [2, 5] + * Public Key: Consists of the modulus n and the public exponent e, used to verify signatures. + * Private Key: Consists of the modulus n and the private exponent d, kept secret and used to generate + signatures. [2, 5] Signature Generation (Signing) - • Compute the hash value of the message: h = hash(msg). - • Raise the hash to the power of the private exponent d modulo n to create the signature: $s = h^d \pmod n$. - • Send the signature along with the original message. [2, 4, 6] + * Compute the hash value of the message: h = hash(msg). + * Raise the hash to the power of the private exponent d modulo n to create the signature: $s = h^d \pmod n$. + * Send the signature along with the original message. [2, 4, 6] Signature Verification - • Compute the hash value of the received message: h = hash(msg). - • Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. - • Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] + * Compute the hash value of the received message: h = hash(msg). + * Raise the signature to the power of the public exponent e modulo n to recover the hash: $h' = s^e \pmod n$. + * Compare the calculated hash h with the recovered hash h'. If they match, the signature is valid. [2, 4, 7, 8] citations: - - [1] https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ - [2] https://cryptobook.nakov.com/digital-signatures/rsa-signatures - [3] https://www.encryptionconsulting.com/education-center/what-is-rsa/ - [4] https://www.youtube.com/watch?v=TeuKV5kHLyQ - [5] https://en.wikipedia.org/wiki/RSA_cryptosystem - [6] https://securew2.com/blog/what-is-rsa-asymmetric-encryption - [7] https://cryptobook.nakov.com/digital-signatures/rsa-signatures - [8] https://students.cs.byu.edu/~cs465ta/lectures/rsa_notes.pdf + 1: https://www.geeksforgeeks.org/computer-networks/rsa-and-digital-signatures/ + 2: https://cryptobook.nakov.com/digital-signatures/rsa-signatures + 3: https://www.encryptionconsulting.com/education-center/what-is-rsa/ + 4: https://www.youtube.com/watch?v=TeuKV5kHLyQ + 5: https://en.wikipedia.org/wiki/RSA_cryptosystem + 6: https://securew2.com/blog/what-is-rsa-asymmetric-encryption + 7: https://cryptobook.nakov.com/digital-signatures/rsa-signatures + 8: https://students.cs.byu.edu/~cs465ta/lectures/rsa_notes.pdf agreement: dh: description: !markdown > - The Diffie-Hellman (DH) key agreement algorithm is a foundational cryptographic protocol that allows two parties to establish a shared secret key over an insecure communication channel without explicitly transmitting the key itself. Published by Whitfield Diffie and Martin Hellman in 1976, it was the first practical implementation of public-key cryptography. Once the shared secret is calculated, it is typically passed to a key derivation function to generate symmetric keys for high-speed encryption algorithms like AES. [1, 2, 3, 4] - The Mathematical Framework - The security of the DH algorithm relies entirely on the mathematical complexity of the Discrete Logarithm Problem. While it is computationally easy to raise a number to a power modulo a prime, it is extremely difficult to reverse that operation and find the exponent if the numbers are sufficiently large. [5, 6] + The Diffie-Hellman (DH) key agreement algorithm is a foundational cryptographic protocol that allows two parties + to establish a shared secret key over an insecure communication channel without explicitly transmitting the key + itself. Published by Whitfield Diffie and Martin Hellman in 1976, it was the first practical implementation of + public-key cryptography. Once the shared secret is calculated, it is typically passed to a key derivation + function to generate symmetric keys for high-speed encryption algorithms like AES. [1, 2, 3, 4] + + # The Mathematical Framework + + The security of the DH algorithm relies entirely on the mathematical complexity of the Discrete Logarithm + Problem. While it is computationally easy to raise a number to a power modulo a prime, it is extremely + difficult to reverse that operation and find the exponent if the numbers are sufficiently large. [5, 6] + The protocol relies on two public parameters: - • p (Modulus): A very large, random prime number. - • g (Generator): A primitive root modulo p. [2, 7] + * p (Modulus): A very large, random prime number. + * g (Generator): A primitive root modulo p. [2, 7] - Step-by-Step Process + # Step-by-Step Process - 1. Parameter Agreement: Alice and Bob publicly agree on a modulus p and a generator g. Eavesdroppers can see these values. - 2. Private Key Selection: Alice chooses a secret integer a, and Bob chooses a secret integer b. Neither party ever shares their private integer. + 1. Parameter Agreement: Alice and Bob publicly agree on a modulus p and a generator g. Eavesdroppers + can see these values. + 2. Private Key Selection: Alice chooses a secret integer a, and Bob chooses a secret integer b. Neither + party ever shares their private integer. 3. Public Key Computation: - • Alice computes her public key: $A = g^a \pmod p$. - • Bob computes his public key: $B = g^b \pmod p$. [10] + * Alice computes her public key: $A = g^a \pmod p$. + * Bob computes his public key: $B = g^b \pmod p$. 10: 4. Public Key Exchange: Alice sends A to Bob, and Bob sends B to Alice across the insecure channel. 5. Shared Secret Calculation: - • Alice calculates the secret using Bob's public key: $S = B^a \pmod p$. - • Bob calculates the secret using Alice's public key: $S = A^b \pmod p$. [8, 10, 11, 12, 13] + * Alice calculates the secret using Bob's public key: $S = B^a \pmod p$. + * Bob calculates the secret using Alice's public key: $S = A^b \pmod p$. [8, 10, 11, 12, 13] - Both mathematical formulas yield the exact same value because modular exponentiation is commutative: $S = (g^b)^a \pmod p = (g^a)^b \pmod p = g^{ab} \pmod p$ - Strengths and Variants + Both mathematical formulas yield the exact same value because modular exponentiation is + commutative: $S = (g^b)^a \pmod p = (g^a)^b \pmod p = g^{ab} \pmod p$ + + # Strengths and Variants - • Forward Secrecy: When implemented as Ephemeral Diffie-Hellman (DHE), new random keys are chosen for every single session. If a long-term master key is compromised in the future, attackers still cannot decrypt past recorded sessions. - • Elliptic Curve Diffie-Hellman (ECDH): A modern variant that uses the algebraic structure of elliptic curves instead of traditional modular arithmetic. It achieves the same level of security as standard DH but with significantly smaller key sizes, making it much faster and more efficient. [4, 14, 15, 16, 17] + * Forward Secrecy: When implemented as Ephemeral Diffie-Hellman (DHE), new random keys are chosen for every + single session. If a long-term master key is compromised in the future, attackers still cannot decrypt + past recorded sessions. + * Elliptic Curve Diffie-Hellman (ECDH): A modern variant that uses the algebraic structure of elliptic curves + instead of traditional modular arithmetic. It achieves the same level of security as standard DH but with + significantly smaller key sizes, making it much faster and more efficient. [4, 14, 15, 16, 17] - Core Limitation: No Authentication - The raw Diffie-Hellman protocol does not authenticate the identities of the communicating parties. Because of this flaw, it is fully vulnerable to a Man-in-the-Middle (MITM) attack. An attacker sitting between Alice and Bob can silently intercept the public keys, substitute their own, and establish separate shared secrets with both sides. To remain secure in real-world protocols like TLS/HTTPS and IPsec VPNs, DH must always be combined with an authentication mechanism, such as digital certificates or digital signatures. [1, 6, 9] - Would you like to explore how Elliptic Curve Diffie-Hellman (ECDH) reduces key sizes, or should we look at a code implementation of standard DH? + # Core Limitation: No Authentication + + The raw Diffie-Hellman protocol does not authenticate the identities of the communicating parties. Because + of this flaw, it is fully vulnerable to a Man-in-the-Middle (MITM) attack. An attacker sitting between Alice and + Bob can silently intercept the public keys, substitute their own, and establish separate shared secrets with + both sides. To remain secure in real-world protocols like TLS/HTTPS and IPsec VPNs, DH must always be combined + with an authentication mechanism, such as digital certificates or digital signatures. [1, 6, 9] citations: - [1] https://networklessons.com/miscellaneous/introduction-to-diffie-hellman-key-exchange - [2] https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b - [3] https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim - [4] https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/ - [5] https://www.youtube.com/watch?v=85oMrKd8afY - [6] https://polymesh.network/blog/the-diffie-hellman-key-exchange - [7] https://4js.com/online_documentation/fjs-fgl-manual-html/fgl-topics/c_gws_dh_algorithm.html - [8] https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ - [9] https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ - [10] https://security.stackexchange.com/questions/45963/diffie-hellman-key-exchange-in-plain-english - [11] https://eureka.patsnap.com/article/understanding-diffie-hellman-key-exchange-explained-simply - [12] https://labex.io/tutorials/linux-basic-key-exchange-with-diffie-hellman-in-cryptography-632720 - [13] https://eureka.patsnap.com/article/the-mathematics-behind-diffie-hellman-key-exchange - [14] https://www.ibm.com/docs/en/i/7.4.0?topic=q-calculate-diffie-hellman-secret-key-qc3calds-qc3calculatedhsecretkey - [15] https://wiki.openssl.org/index.php/Elliptic_Curve_Diffie_Hellman - [16] https://medium.com/@dipakkrdas/few-fundamental-cryptography-concepts-17aa1f6fe3ae - [17] https://medium.com/@sylvain.tiset/locks-and-fingerprints-part-1-how-encryption-keep-data-safe-d9911215c0a4 + 1: https://networklessons.com/miscellaneous/introduction-to-diffie-hellman-key-exchange + 2: https://dev.to/techlabma/diffie-hellman-key-exchange-dhke-algorithm-505b + 3: https://www.hypr.com/security-encyclopedia/diffie-hellman-algorithim + 4: https://cryptography.io/en/latest/hazmat/primitives/asymmetric/dh/ + 5: https://www.youtube.com/watch?v=85oMrKd8afY + 6: https://polymesh.network/blog/the-diffie-hellman-key-exchange + 7: https://4js.com/online_documentation/fjs-fgl-manual-html/fgl-topics/c_gws_dh_algorithm.html + 8: https://doubleoctopus.com/security-wiki/encryption-and-cryptography/diffie-hellman-algorithm/ + 9: https://www.hexnode.com/blogs/explained/what-is-diffie-hellman-dh-key-exchange/ + 10: https://security.stackexchange.com/questions/45963/diffie-hellman-key-exchange-in-plain-english + 11: https://eureka.patsnap.com/article/understanding-diffie-hellman-key-exchange-explained-simply + 12: https://labex.io/tutorials/linux-basic-key-exchange-with-diffie-hellman-in-cryptography-632720 + 13: https://eureka.patsnap.com/article/the-mathematics-behind-diffie-hellman-key-exchange + 14: https://www.ibm.com/docs/en/i/7.4.0?topic=q-calculate-diffie-hellman-secret-key-qc3calds-qc3calculatedhsecretkey + 15: https://wiki.openssl.org/index.php/Elliptic_Curve_Diffie_Hellman + 16: https://medium.com/@dipakkrdas/few-fundamental-cryptography-concepts-17aa1f6fe3ae + 17: https://medium.com/@sylvain.tiset/locks-and-fingerprints-part-1-how-encryption-keep-data-safe-d9911215c0a4 ecdh: description: !markdown > - The Elliptic Curve Diffie-Hellman (ECDH) algorithm is a modern security protocol. It lets two people create a shared secret key over an open, unsafe network. They use this secret key to lock and unlock private messages. It relies on the math of elliptic curves instead of large numbers. [1, 2] - How the Steps Work + The Elliptic Curve Diffie-Hellman (ECDH) algorithm is a modern security protocol. It lets two people create a + shared secret key over an open, unsafe network. They use this secret key to lock and unlock private messages. It + relies on the math of elliptic curves instead of large numbers. [1, 2] + + # How the Steps Work - • Choose a public curve and a starting point (G) together. - • Pick a random secret number to act as your private key. - • Multiply your private key by the starting point to make your public key. - • Send your public key to the other person. - • Take the public key sent to you and multiply it by your own private key. - • Both people now share the exact same secret value. [1, 3, 4, 5, 6] + * Choose a public curve and a starting point (G) together. + * Pick a random secret number to act as your private key. + * Multiply your private key by the starting point to make your public key. + * Send your public key to the other person. + * Take the public key sent to you and multiply it by your own private key. + * Both people now share the exact same secret value. [1, 3, 4, 5, 6] - Why People Use It + # Why People Use It - • Small keys: It gives high security using tiny key sizes. - • Fast speed: It uses less computer power and memory. - • Safe data: Hackers cannot figure out the secret key just by watching the network. [1, 7, 8] + * Small keys: It gives high security using tiny key sizes. + * Fast speed: It uses less computer power and memory. + * Safe data: Hackers cannot figure out the secret key just by watching the network. [1, 7, 8] - If you'd like, I can explain:The math difference between normal Diffie-Hellman and ECDHWhat ECDHE (Ephemeral) means for forward safetyHow it is used in TLS or messaging apps - AI responses may include mistakes. citations: !citations 1: https://www.hexnode.com/blogs/explained/what-is-elliptic-curve-diffie-hellman-ecdh/ 2: https://www.cardlogix.com/glossary/elliptic-curve-diffie-hellman-ecdh/ @@ -651,22 +697,31 @@ agreement: ecdhe: description: !markdown > - ECDHE stands for Elliptic Curve Diffie-Hellman Ephemeral. It is a secure key exchange protocol that allows two parties to create a shared secret key over an open network without sending the secret itself. It combines elliptic curve math with temporary keys to give high speed and forward privacy. [1, 2] - How ECDHE Works + ECDHE stands for Elliptic Curve Diffie-Hellman Ephemeral. It is a secure key exchange protocol that allows two + parties to create a shared secret key over an open network without sending the secret itself. It combines + elliptic curve math with temporary keys to give high speed and forward privacy. [1, 2] + + # How ECDHE Works - • Pick a Curve: Both sides agree on a specific elliptic curve and a base point on that curve. - • Make Key Pairs: Each side creates a random private number and multiplies it by the base point to get a public key. - • Trade Public Keys: The two sides swap their public keys over the network. - • Compute Secret: Each side combines the other side's public key with its own private number to arrive at the exact same shared secret number. [3, 4] + * Pick a Curve: Both sides agree on a specific elliptic curve and a base point on that curve. + * Make Key Pairs: Each side creates a random private number and multiplies it by the base point to get a + public key. + * Trade Public Keys: The two sides swap their public keys over the network. + * Compute Secret: Each side combines the other side's public key with its own private number to arrive at the + exact same shared secret number. [3, 4] Core Benefits - • Ephemeral (Forward Secrecy): New temporary keys are made for every single session and then thrown away. If a server's main key is stolen later, old recorded sessions stay safe. - • Small Key Size: It offers the same security as older methods while using much smaller keys, which saves CPU power and network data. - • Widespread Use: It is a core security standard used inside modern web protocols like Transport Layer Security (TLS) to protect web traffic. [1, 9] + * Ephemeral (Forward Secrecy): New temporary keys are made for every single session and then thrown away. If a + server's main key is stolen later, old recorded sessions stay safe. + * Small Key Size: It offers the same security as older methods while using much smaller keys, which saves CPU + power and network data. + * Widespread Use: It is a core security standard used inside modern web protocols like Transport Layer + Security (TLS) to protect web traffic. [1, 9] - If you'd like, I can explain:The math difference between standard Diffie-Hellman and elliptic curvesWhy X25519 is the preferred curve todayHow it handles quantum computer risksLet me know what you want to explore next. - AI responses may include mistakes. + If you'd like, I can explain:The math difference between standard Diffie-Hellman and elliptic curvesWhy + X25519 is the preferred curve todayHow it handles quantum computer risksLet me know what you want to + explore next. citations: 1: https://www.emergentmind.com/topics/elliptic-curve-diffie-hellman-ephemeral-ecdhe 2: https://micsolutions.co.uk/2024/12/19/ecdhe/ @@ -817,175 +872,182 @@ sha3: block_cypher_modes: ecb: description: !markdown > - Electronic Codebook (ECB) mode is the simplest and most basic block cipher mode of operation. It splits a message into fixed-size blocks and encrypts each block independently using the same secret key. Identical plaintext blocks always yield identical ciphertext blocks, making it insecure for most uses. [1, 2, 3, 4] - How ECB Works - - • Splitting: Data is cut into equal chunks matching the block size (such as 16 bytes for AES). - • Independent Encryption: Each block is processed through the cipher separately without interaction from other blocks. - • Independent Decryption: Cipher blocks are decrypted individually back to text using the same key. [3, 4, 5] - - Advantages + Electronic Codebook (ECB) mode is the simplest and most basic block cipher mode of operation. It splits a message + into fixed-size blocks and encrypts each block independently using the same secret key. Identical plaintext + blocks always yield identical ciphertext blocks, making it insecure for most uses. [1, 2, 3, 4] + + #How ECB Works - • Simplicity: Very easy to program and use. - • Parallel Processing: Blocks encrypt or decrypt simultaneously [0.12], saving time on multi-core systems. [4] + * Splitting: Data is cut into equal chunks matching the block size (such as 16 bytes for AES). + * Independent Encryption: Each block is processed through the cipher separately without interaction from other blocks. + * Independent Decryption: Cipher blocks are decrypted individually back to text using the same key. [3, 4, 5] - Security Weaknesses + # Advantages - • Pattern Leakage: Identical inputs create identical outputs, meaning visual shapes or data trends remain visible (famous for the "Tux the Penguin" encrypted image demonstration). - • No Hiding of Data: An attacker can swap, delete, or replay blocks [0.13] without detection. Most experts advise against using ECB for private or sensitive data. [2, 4] + * Simplicity: Very easy to program and use. + * Parallel Processing: Blocks encrypt or decrypt simultaneously [0.12], saving time on multi-core systems. 4: - If you want, I can explain:Cipher Block Chaining (CBC) as a secure alternativePadding methods used when data does not fit the block size evenly - AI responses may include mistakes. + # Security Weaknesses - [1] https://www.geeksforgeeks.org/computer-networks/electronic-code-book-ecb-in-cryptography/ - [2] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation - [3] https://destcert.com/resources/types-of-ciphers/ - [4] https://medium.com/@brsdncr/cryptography-lesson-notebook-1-aes-ecb-electronic-codebook-5baabcedfa59 - [5] https://www.youtube.com/watch?v=jDnenb9EHQk + * Pattern Leakage: Identical inputs create identical outputs, meaning visual shapes or data trends remain + visible (famous for the "Tux the Penguin" encrypted image demonstration). + * No Hiding of Data: An attacker can swap, delete, or replay blocks [0.13] without detection. Most experts + advise against using ECB for private or sensitive data. [2, 4] + citations: + 1: https://www.geeksforgeeks.org/computer-networks/electronic-code-book-ecb-in-cryptography/ + 2: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation + 3: https://destcert.com/resources/types-of-ciphers/ + 4: https://medium.com/@brsdncr/cryptography-lesson-notebook-1-aes-ecb-electronic-codebook-5baabcedfa59 + 5: https://www.youtube.com/watch?v=jDnenb9EHQk cbc: description: !markdown > - Cipher Block Chaining (CBC) is a mode of operation for block ciphers where each plaintext block is combined with the previous ciphertext block using an exclusive-OR (XOR) operation before being encrypted. This chaining process ensures that identical plaintext blocks yield entirely different ciphertext outputs. [1, 2, 3] - How CBC Encryption Works + Cipher Block Chaining (CBC) is a mode of operation for block ciphers where each plaintext block is combined with + the previous ciphertext block using an exclusive-OR (XOR) operation before being encrypted. This chaining process + ensures that identical plaintext blocks yield entirely different ciphertext outputs. [1, 2, 3] + + # How CBC Encryption Works - • Initialization Vector (IV): Because there is no previous ciphertext for the first plaintext block, a unique or random value called an IV is XORed with the first block. - • Chaining: For every subsequent block, the current plaintext block is XORed with the ciphertext output of the immediately preceding block. - • Encryption: The combined result of the XOR operation is then passed through the block cipher algorithm using the secret key. - • Sequential processing: Encryption must be performed strictly in sequence (serially) because block N cannot be encrypted until block N-1 finishes. [3, 4, 5] + * Initialization Vector (IV): Because there is no previous ciphertext for the first plaintext block, a unique + or random value called an IV is XORed with the first block. + * Chaining: For every subsequent block, the current plaintext block is XORed with the ciphertext output of the + immediately preceding block. + * Encryption: The combined result of the XOR operation is then passed through the block cipher algorithm using + the secret key. + * Sequential processing: Encryption must be performed strictly in sequence (serially) because block N cannot be + encrypted until block N-1 finishes. [3, 4, 5] How CBC Decryption Works - • Reverse process: The cipher takes a ciphertext block, runs it through the block cipher decryption function, and then XORs the result with the previous ciphertext block (or the IV for the first block) to recover the original plaintext. - • Parallel decryption: Unlike encryption, decryption can be done in parallel because all ciphertext blocks are already available. [3, 6] + * Reverse process: The cipher takes a ciphertext block, runs it through the block cipher decryption function, + and then XORs the result with the previous ciphertext block (or the IV for the first block) to recover the + original plaintext. + * Parallel decryption: Unlike encryption, decryption can be done in parallel because all ciphertext blocks + are already available. [3, 6] Key Pros and Cons - • Pros: Hides patterns and prevents repetitive plaintext leaks (unlike basic ECB mode); highly secure when paired with a proper, unpredictable IV. - • Cons: Slower due to its sequential nature during encryption; prone to error propagation (a corrupted ciphertext block corrupts its own block decryption and distorts the next plaintext block). [5, 8, 9] - - If you'd like, I can explain:How the Initialization Vector (IV) must be managed securelyHow CBC compares to Counter (CTR) or Galois/Counter Mode (GCM)How padding is handled via PKCS#7Let me know what you want to explore next! - AI responses may include mistakes. - - [1] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ - [2] https://www.portnox.com/cybersecurity-101/general-security/what-is-cipher-block-chaining/ - [3] https://www.sciencedirect.com/topics/computer-science/cipher-block-chaining - [4] https://datatracker.ietf.org/doc/html/rfc2451 - [5] https://www.youtube.com/watch?v=SV2qsNfI1Cs - [6] https://www.sciencedirect.com/topics/mathematics/block-cipher - [7] https://www.youtube.com/watch?v=NnLLkmgBhCY - [8] https://www.sciencedirect.com/topics/mathematics/cipher-block-chaining - [9] https://destcert.com/resources/types-of-ciphers/ + * Pros: Hides patterns and prevents repetitive plaintext leaks (unlike basic ECB mode); highly secure when + paired with a proper, unpredictable IV. + * Cons: Slower due to its sequential nature during encryption; prone to error propagation (a corrupted + ciphertext block corrupts its own block decryption and distorts the next plaintext block). [5, 8, 9] + citations: + 1: https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ + 2: https://www.portnox.com/cybersecurity-101/general-security/what-is-cipher-block-chaining/ + 3: https://www.sciencedirect.com/topics/computer-science/cipher-block-chaining + 4: https://datatracker.ietf.org/doc/html/rfc2451 + 5: https://www.youtube.com/watch?v=SV2qsNfI1Cs + 6: https://www.sciencedirect.com/topics/mathematics/block-cipher + 7: https://www.youtube.com/watch?v=NnLLkmgBhCY + 8: https://www.sciencedirect.com/topics/mathematics/cipher-block-chaining + 9: https://destcert.com/resources/types-of-ciphers/ cfb: ofb: description: !markdown > - Output Feedback (OFB) mode turns a block cipher into a synchronous stream cipher. It encrypts an Initialization Vector (IV) and feeds that cipher output back into the next encryption round. This produces a keystream that is XORed with the plaintext to create the ciphertext. [1, 2, 3, 4] - How OFB Mode Works - - • Keystream Generation: The cipher encrypts an IV to create the first output block. It feeds that output back into the cipher again to create the next block, repeating this process to form a continuous keystream. - • Encryption: The system XORs the generated keystream blocks with the plaintext blocks to produce the final ciphertext. - • Decryption: Decryption uses the exact same steps. It generates the identical keystream by encrypting the IV and XORs it with the ciphertext to recover the original plaintext. [4] - - Key Features and Properties - - • No Error Propagation: A bit error in the ciphertext only affects the single corresponding bit in the decrypted plaintext, rather than corrupting later blocks. - • Preprocessing: The system can generate the entire keystream before the plaintext is even available, speeding up real-time processing. - • No Parallel Encryption: Because each keystream block depends strictly on the output of the previous block, you cannot encrypt multiple blocks at the same time. - • IV Uniqueness: Reusing the same IV and secret key combination completely destroys security by repeating the exact same keystream. [7] - - If you would like, I can compare OFB mode with CFB (Cipher Feedback) or CTR (Counter) mode to show how their feedback and performance differ. - AI responses may include mistakes. - - [1] https://www.youtube.com/watch?v=gIzFAFo5a6M - [2] https://www.youtube.com/watch?v=Q_hi2jWg6dc - [3] https://destcert.com/resources/types-of-ciphers/ - [4] https://www.youtube.com/watch?v=OGdBTfouuao - [5] https://www.tutorialspoint.com/cryptography/output_feedback_mode.htm - [6] https://crypto.stackexchange.com/questions/25961/operation-modes-of-block-ciphers-how-are-used - [7] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ - - - ifb: - description: !markdown > - It appears IFB is not a standard or widely recognized block cipher mode of operation (such as CBC, CFB, OFB, or CTR). You might have meant CFB (Cipher Feedback), OFB (Output Feedback), or perhaps a typo for an internal feedback mechanism in a specific custom stream/block design. [1, 2, 3] - Standard feedback-based modes include: - Cipher Feedback (CFB) Mode - - • Function: Turns a block cipher into a self-synchronizing stream cipher. - • Mechanism: Encrypts the previous ciphertext block, then XORs the output with the current plaintext block to produce the new ciphertext. - • Use Case: Good for streaming data where synchronization or byte-by-byte processing is needed. [1, 4] - - Output Feedback (OFB) Mode - - • Function: Turns a block cipher into a synchronous stream cipher. - • Mechanism: Repeatedly encrypts the initialization vector (IV) or previous cipher output rather than the ciphertext, generating a independent keystream to XOR with the plaintext. - • Use Case: Helpful when transmission errors are common, because errors do not propagate to future blocks. [1, 2, 5, 6] - - Did you mean CFB or OFB, or are you referring to a specific protocol or paper that defines IFB? Let me know so I can give you the exact details you need. - AI responses may include mistakes. - - [1] https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ - [2] https://www.youtube.com/watch?v=gIzFAFo5a6M - [3] https://groups.google.com/g/sci.crypt.research/c/ZD82NIacVmU/m/WDYm8_xmzTQJ - [4] https://thorteaches.com/glossary/cipher-feedback-cfb-mode/ - [5] https://crypto.stackexchange.com/questions/98347/is-ofb-mode-a-stream-cipher - [6] https://www.researchgate.net/figure/CFB-Cipher-Feedback-mode-Output-Feedback-OFB-mode-Like-CFB-mode-output-feedback_fig3_273260684 + Output Feedback (OFB) mode turns a block cipher into a synchronous stream cipher. It encrypts an Initialization + Vector (IV) and feeds that cipher output back into the next encryption round. This produces a keystream that is + XORed with the plaintext to create the ciphertext. [1, 2, 3, 4] + + # How OFB Mode Works + + * Keystream Generation: The cipher encrypts an IV to create the first output block. It feeds that output back + into the cipher again to create the next block, repeating this process to form a continuous keystream. + * Encryption: The system XORs the generated keystream blocks with the plaintext blocks to produce the + final ciphertext. + * Decryption: Decryption uses the exact same steps. It generates the identical keystream by encrypting the + IV and XORs it with the ciphertext to recover the original plaintext. 4: + + # Key Features and Properties + + * No Error Propagation: A bit error in the ciphertext only affects the single corresponding bit in the + decrypted plaintext, rather than corrupting later blocks. + * Preprocessing: The system can generate the entire keystream before the plaintext is even available, + speeding up real-time processing. + * No Parallel Encryption: Because each keystream block depends strictly on the output of the previous block, + you cannot encrypt multiple blocks at the same time. + * IV Uniqueness: Reusing the same IV and secret key combination completely destroys security by repeating + the exact same keystream. 7: + + If you would like, I can compare OFB mode with CFB (Cipher Feedback) or CTR (Counter) mode to show how their + feedback and performance differ. + citations: + 1: https://www.youtube.com/watch?v=gIzFAFo5a6M + 2: https://www.youtube.com/watch?v=Q_hi2jWg6dc + 3: https://destcert.com/resources/types-of-ciphers/ + 4: https://www.youtube.com/watch?v=OGdBTfouuao + 5: https://www.tutorialspoint.com/cryptography/output_feedback_mode.htm + 6: https://crypto.stackexchange.com/questions/25961/operation-modes-of-block-ciphers-how-are-used + 7: https://www.geeksforgeeks.org/ethical-hacking/block-cipher-modes-of-operation/ ctr: description: !markdown > - Counter (CTR) mode is a block cipher mode of operation that turns a standard block cipher (like AES) into a stream cipher. It works by encrypting a sequential counter value combined with a unique nonce, then XORing the resulting keystream block with the plaintext to generate the ciphertext. [1, 2, 3] - How CTR Mode Works - - • Nonce and Counter: Each block uses a unique counter block made by joining a fixed nonce and an incrementing number. - • Keystream Generation: The block cipher encrypts each counter block using the secret key to create a unique keystream segment. - • XOR Operation: The plaintext is XORed with this encrypted keystream to produce the ciphertext. - • Decryption Simplicity: Decryption uses the exact same process; the counter blocks are encrypted again and XORed with the ciphertext to recover the original plaintext. [1, 2, 3, 4] - - Key Characteristics - - • Parallel Processing: Both encryption and decryption can be run in parallel across multiple blocks because the counter values are known in advance. - • No Padding Needed: Because it acts like a stream cipher, the final block does not need to be padded to a full block size. - • Random Access: You can jump directly to decrypt any specific block without processing the blocks that come before it. - • Nonce Reuse Risk: Reusing the same nonce and key combination completely destroys the security of the cipher, allowing attackers to recover the keystream. [2, 4, 7] - - If you'd like, I can:Compare CTR mode vs. CBC modeExplain Galois/Counter Mode (GCM) for authenticationShow how the nonce and counter blocks are structured internallyLet me know how you want to proceed. - AI responses may include mistakes. + Counter (CTR) mode is a block cipher mode of operation that turns a standard block cipher (like AES) into a + stream cipher. It works by encrypting a sequential counter value combined with a unique nonce, then XORing the + resulting keystream block with the plaintext to generate the ciphertext. [1, 2, 3] + + # How CTR Mode Works + + * Nonce and Counter: Each block uses a unique counter block made by joining a fixed nonce and an + incrementing number. + * Keystream Generation: The block cipher encrypts each counter block using the secret key to create a unique + keystream segment. + * XOR Operation: The plaintext is XORed with this encrypted keystream to produce the ciphertext. + * Decryption Simplicity: Decryption uses the exact same process; the counter blocks are encrypted again and + XORed with the ciphertext to recover the original plaintext. [1, 2, 3, 4] + + # Key Characteristics + + * Parallel Processing: Both encryption and decryption can be run in parallel across multiple blocks because the + counter values are known in advance. + * No Padding Needed: Because it acts like a stream cipher, the final block does not need to be padded to a + full block size. + * Random Access: You can jump directly to decrypt any specific block without processing the blocks that + come before it. + * Nonce Reuse Risk: Reusing the same nonce and key combination completely destroys the security of the + cipher, allowing attackers to recover the keystream. [2, 4, 7] - [1] https://www.hexnode.com/blogs/explained/what-is-counter-mode-ctr/ - [2] https://www.youtube.com/watch?v=zX0PZtqerCI - [3] https://pycryptodome.readthedocs.io/en/v3.20.0/src/cipher/classic.html - [4] https://ctf101.org/cryptography/what-are-block-ciphers/ - [5] https://www.tutorialspoint.com/cryptography/counter_mode.htm - [6] https://www.youtube.com/watch?v=gUNyXs6mEKM - [7] https://medium.com/@malkhoori/aes-gcm-nonce-reuse-writeup-7d5a92b599cb + citations: + 1: https://www.hexnode.com/blogs/explained/what-is-counter-mode-ctr/ + 2: https://www.youtube.com/watch?v=zX0PZtqerCI + 3: https://pycryptodome.readthedocs.io/en/v3.20.0/src/cipher/classic.html + 4: https://ctf101.org/cryptography/what-are-block-ciphers/ + 5: https://www.tutorialspoint.com/cryptography/counter_mode.htm + 6: https://www.youtube.com/watch?v=gUNyXs6mEKM + 7: https://medium.com/@malkhoori/aes-gcm-nonce-reuse-writeup-7d5a92b599cb gcm: description: !markdown > - Galois/Counter Mode (GCM) is an authenticated encryption mode for block ciphers. It provides both data confidentiality (secrecy) and authenticity (integrity). GCM combines Counter (CTR) mode for encryption with a special GHASH function based on Galois field multiplication for integrity verification. [1, 2, 3, 4] - Key Components and Operation - - • Counter Mode (Encryption): Turns a block cipher into a stream cipher by encrypting sequential counter values and XORing the output with plaintext blocks. - • GHASH (Authentication): Processes the ciphertext, optional additional authenticated data (AAD), and length fields using universal hashing over a binary Galois field (GF(2¹²⁸)) to output a unique authentication tag. - • Nonce / IV: Requires a unique initialization vector (typically 96 bits) for every execution under the same key. Never reuse a nonce. [1, 3, 6] - - Advantages of GCM - - • High Speed: Supports parallel processing for both encryption and authentication, making it optimal for high-bandwidth networks. - • Single-Pass Efficiency: Computes privacy and integrity checks simultaneously rather than sequentially. - • Standard Adoption: Widely used in modern protocols like TLS 1.2+, IPsec, and SSH due to its security and performance. [4, 8, 9, 10, 11] - - If you'd like, I can:Detail how to prevent nonce reuse vulnerabilitiesCompare GCM with CCM or ChaCha20-Poly1305 modesShow a basic code implementation overviewLet me know how you would like to proceed. - AI responses may include mistakes. - - [1] https://www.ibm.com/docs/en/linux-on-systems?topic=mo-electronic-code-book-ecb-mode - [2] https://www.intel.com/content/www/us/en/content-details/783641/advanced-encryption-standard-galois-counter-mode-optimized-ghash-function-technology-guide.html - [3] https://www.youtube.com/watch?v=-fpVv_T4xwA - [4] https://www.cincopa.com/learn/introduction-to-aes-gcm-mode-and-its-advantages - [5] https://medium.com/@pravallikayakkala123/understanding-aes-encryption-and-aes-gcm-mode-an-in-depth-exploration-using-java-e03be85a3faa - [6] https://www.youtube.com/watch?v=C_cQIYPWTXs - [7] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/gcm.html - [8] https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf - [9] https://www.youtube.com/watch?v=gUNyXs6mEKM - [10] https://datatracker.ietf.org/doc/html/rfc5647 - [11] https://crypto.stackexchange.com/questions/2310/what-is-the-difference-between-cbc-and-gcm-mode + Galois/Counter Mode (GCM) is an authenticated encryption mode for block ciphers. It provides both data + confidentiality (secrecy) and authenticity (integrity). GCM combines Counter (CTR) mode for encryption with a + special GHASH function based on Galois field multiplication for integrity verification. [1, 2, 3, 4] + + # Key Components and Operation + + * Counter Mode (Encryption): Turns a block cipher into a stream cipher by encrypting sequential counter values + and XORing the output with plaintext blocks. + * GHASH (Authentication): Processes the ciphertext, optional additional authenticated data (AAD), and length + fields using universal hashing over a binary Galois field (GF(2¹²⁸)) to output a unique authentication tag. + * Nonce / IV: Requires a unique initialization vector (typically 96 bits) for every execution under the same + key. Never reuse a nonce. [1, 3, 6] + + # Advantages of GCM + + * High Speed: Supports parallel processing for both encryption and authentication, making it optimal for + high-bandwidth networks. + * Single-Pass Efficiency: Computes privacy and integrity checks simultaneously rather than sequentially. + * Standard Adoption: Widely used in modern protocols like TLS 1.2+, IPsec, and SSH due to its security + and performance. [4, 8, 9, 10, 11] + citations: + 1: https://www.ibm.com/docs/en/linux-on-systems?topic=mo-electronic-code-book-ecb-mode + 2: https://www.intel.com/content/www/us/en/content-details/783641/advanced-encryption-standard-galois-counter-mode-optimized-ghash-function-technology-guide.html + 3: https://www.youtube.com/watch?v=-fpVv_T4xwA + 4: https://www.cincopa.com/learn/introduction-to-aes-gcm-mode-and-its-advantages + 5: https://medium.com/@pravallikayakkala123/understanding-aes-encryption-and-aes-gcm-mode-an-in-depth-exploration-using-java-e03be85a3faa + 6: https://www.youtube.com/watch?v=C_cQIYPWTXs + 7: https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/gcm.html + 8: https://csrc.nist.rip/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf + 9: https://www.youtube.com/watch?v=gUNyXs6mEKM + 10: https://datatracker.ietf.org/doc/html/rfc5647 + 11: https://crypto.stackexchange.com/questions/2310/what-is-the-difference-between-cbc-and-gcm-mode lrw: xcb: hctr: @@ -997,90 +1059,111 @@ block_cypher_modes: ccm: description: !markdown > - CCM (Counter with CBC-MAC) is an authenticated encryption mode for 128-bit block ciphers like AES. It provides both data confidentiality (encryption) and authenticity (integrity tag) in one operation. It combines Counter (CTR) mode for encryption and Cipher Block Chaining Message Authentication Code (CBC-MAC) for integrity. [1, 2, 3, 4, 5] - How CCM Works - - • Two Core Parts: Uses CTR mode to encrypt the data and CBC-MAC to generate a security tag. - • Associated Data (AD): Can authenticate extra unencrypted data (like packet headers or IP addresses). - • Nonce Requirement: Requires a unique nonce (number used once) for every message under the same key to remain secure. Reusing a nonce breaks confidentiality entirely. [1, 2, 6] + CCM (Counter with CBC-MAC) is an authenticated encryption mode for 128-bit block ciphers like AES. It provides + both data confidentiality (encryption) and authenticity (integrity tag) in one operation. It combines Counter + (CTR) mode for encryption and Cipher Block Chaining Message Authentication Code (CBC-MAC) for + integrity. [1, 2, 3, 4, 5] + + # How CCM Works - Key Properties + * Two Core Parts: Uses CTR mode to encrypt the data and CBC-MAC to generate a security tag. + * Associated Data (AD): Can authenticate extra unencrypted data (like packet headers or IP addresses). + * Nonce Requirement: Requires a unique nonce (number used once) for every message under the same key to + remain secure. Reusing a nonce breaks confidentiality entirely. [1, 2, 6] - • Block Size: Strictly defined for 128-bit block ciphers (such as AES-128). - • Order of Operation: Standard implementations compute the MAC over the associated data and plaintext first, then encrypt both the message and the tag using CTR mode. - • Common Uses: Widely used in constrained wireless networks, including IEEE 802.11i (Wi-Fi security), Bluetooth Low Energy, and ZigBee. [1, 2, 3, 6, 7] + # Key Properties - If you'd like, I can:Compare CCM with GCM (Galois/Counter Mode)Detail the exact step-by-step mathematical blocksExplain how to pick nonce and tag sizesLet me know what you want to explore next! - AI responses may include mistakes. + * Block Size: Strictly defined for 128-bit block ciphers (such as AES-128). + * Order of Operation: Standard implementations compute the MAC over the associated data and plaintext first, + then encrypt both the message and the tag using CTR mode. + * Common Uses: Widely used in constrained wireless networks, including IEEE 802.11i (Wi-Fi security), Bluetooth + Low Energy, and ZigBee. [1, 2, 3, 6, 7] - [1] https://en.wikipedia.org/wiki/CCM_mode - [2] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/ccm.html - [3] https://docs.nordicsemi.com/r/bundle/ps_nrf5340/page/ccm.html - [4] https://datatracker.ietf.org/doc/html/rfc3610 - [5] https://csrc.nist.gov/pubs/sp/800/38/c/upd1/final - [6] https://www.cryptopp.com/wiki/CCM_Mode - [7] https://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/IPCore/HelionTechCores/AESCCMCore + citations: + 1: https://en.wikipedia.org/wiki/CCM_mode + 2: https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/ccm.html + 3: https://docs.nordicsemi.com/r/bundle/ps_nrf5340/page/ccm.html + 4: https://datatracker.ietf.org/doc/html/rfc3610 + 5: https://csrc.nist.gov/pubs/sp/800/38/c/upd1/final + 6: https://www.cryptopp.com/wiki/CCM_Mode + 7: https://www.latticesemi.com/en/Products/DesignSoftwareAndIP/IntellectualProperty/IPCore/HelionTechCores/AESCCMCore xts: description: !markdown > - XTS (XEX-based tweaked-codebook mode with ciphertext stealing) is a block cipher mode designed specifically for full-disk and storage encryption. It secures data at rest by using two keys and a "tweak" value (like a sector number) so identical data blocks yield different ciphertexts, without expanding file sizes. [1, 2, 3] - Key Features of XTS - - • Two Keys: It uses two independent cipher keys—one for the core block encryption and one to encrypt the tweak value. - • The Tweak: It uses a tweak value (position/sector ID) modified via Galois field math. This stops attackers from spotting patterns in identical blocks across different disk sectors. - • No Size Expansion: It uses ciphertext stealing to handle final partial blocks. This avoids padding, meaning the encrypted data matches the exact size of the original data. - • Confidentiality Only: It provides strong data privacy, but it does not offer built-in authentication or tamper detection. [3, 4] - - Common Uses - - • Full-Disk Encryption: Used by software like VeraCrypt and BitLocker. - • Hardware Drives: Used inside secure external SSDs and USB flash drives like the Kingston IronKey. [2, 4, 5, 8, 9] - - If you'd like, I can explain:How ciphertext stealing works mathematicallyA comparison between XTS and CBC or GCM modesPotential security limitations of XTSLet me know what you want to explore next. - AI responses may include mistakes. - - [1] https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/xts.html - [2] https://www.securview.com/ai-security-essentials/xts-mode - [3] https://www.cryptopp.com/wiki/XTS_Mode - [4] https://veracrypt.io/en/Modes%20of%20Operation.html - [5] https://www.kingston.com/unitedkingdom/en/blog/data-security/xts-encryption - [6] https://www.computer.org/csdl/magazine/sp/2010/03/msp2010030068/13rRUxNW1XJ - [7] https://xilinx.github.io/Vitis_Libraries/security/2021.2/guide_L1/internals/xts.html - [8] https://www.kingston.com/en/blog/data-security/xts-encryption - [9] https://terrazone.io/aes-256-encryption-types/ + XTS (XEX-based tweaked-codebook mode with ciphertext stealing) is a block cipher mode designed specifically + for full-disk and storage encryption. It secures data at rest by using two keys and a "tweak" value (like a + sector number) so identical data blocks yield different ciphertexts, without expanding file sizes. [1, 2, 3] + + # Key Features of XTS + + * Two Keys: It uses two independent cipher keys—one for the core block encryption and one to encrypt the + tweak value. + * The Tweak: It uses a tweak value (position/sector ID) modified via Galois field math. This stops attackers + from spotting patterns in identical blocks across different disk sectors. + * No Size Expansion: It uses ciphertext stealing to handle final partial blocks. This avoids padding, meaning + the encrypted data matches the exact size of the original data. + * Confidentiality Only: It provides strong data privacy, but it does not offer built-in authentication or + tamper detection. [3, 4] + + # Common Uses + + * Full-Disk Encryption: Used by software like VeraCrypt and BitLocker. + * Hardware Drives: Used inside secure external SSDs and USB flash drives like the Kingston + IronKey. [2, 4, 5, 8, 9] + citations: + 1: https://xilinx.github.io/Vitis_Libraries/security/2019.2/guide_L1/internals/xts.html + 2: https://www.securview.com/ai-security-essentials/xts-mode + 3: https://www.cryptopp.com/wiki/XTS_Mode + 4: https://veracrypt.io/en/Modes%20of%20Operation.html + 5: https://www.kingston.com/unitedkingdom/en/blog/data-security/xts-encryption + 6: https://www.computer.org/csdl/magazine/sp/2010/03/msp2010030068/13rRUxNW1XJ + 7: https://xilinx.github.io/Vitis_Libraries/security/2021.2/guide_L1/internals/xts.html + 8: https://www.kingston.com/en/blog/data-security/xts-encryption + 9: https://terrazone.io/aes-256-encryption-types/ eme: eax: xex: description: !markdown > - XEX (XOR-Encrypt-XOR) is a tweakable block cipher mode designed by Phillip Rogaway. It masks a plaintext block with a tweak value before and after block cipher encryption. XEX serves as the foundational core for XTS-AES, the standard mode used for secure storage and full-disk encryption. [1, 2, 3, 4, 5, 6] - How XEX Works + XEX (XOR-Encrypt-XOR) is a tweakable block cipher mode designed by Phillip Rogaway. It masks a plaintext + block with a tweak value before and after block cipher encryption. XEX serves as the foundational core + for XTS-AES, the standard mode used for secure storage and full-disk encryption. [1, 2, 3, 4, 5, 6] + + # How XEX Works - • Pre-whitening: The plaintext block is XORed with a masked tweak value (derived from a secondary key and a sector/block index). - • Encryption: The resulting value passes through the standard block cipher function (like AES) using the primary key. - • Post-whitening: The cipher output is XORed again with the same masked tweak value to produce the final ciphertext. - • Tweak evolution: Tweak values across adjacent blocks are modified by multiplying the previous tweak by a primitive element in a finite Galois Field (GF(2¹²⁸)). [3, 6, 7, 8, 9] + * Pre-whitening: The plaintext block is XORed with a masked tweak value (derived from a secondary key + and a sector/block index). + * Encryption: The resulting value passes through the standard block cipher function (like AES) using + the primary key. + * Post-whitening: The cipher output is XORed again with the same masked tweak value to produce the + final ciphertext. + * Tweak evolution: Tweak values across adjacent blocks are modified by multiplying the previous tweak by a + primitive element in a finite Galois Field (GF(2¹²⁸)). [3, 6, 7, 8, 9] Key Characteristics - • Tweakable security: Ensures that identical plaintext blocks encrypt to different ciphertexts when located at different storage addresses or sector numbers. - • Parallelizable: Individual blocks can be encrypted or decrypted independently, allowing high performance on modern hardware. - • No authentication: Provides confidentiality for data at rest but does not protect against data tampering or active manipulation. [9, 10, 11, 12, 13] + * Tweakable security: Ensures that identical plaintext blocks encrypt to different ciphertexts when + located at different storage addresses or sector numbers. + * Parallelizable: Individual blocks can be encrypted or decrypted independently, allowing high + performance on modern hardware. + * No authentication: Provides confidentiality for data at rest but does not protect against data tampering or + active manipulation. [9, 10, 11, 12, 13] - If you are planning an implementation, would you like to explore how XEX transitions into XTS mode with ciphertext stealing, or do you need help with performance considerations for disk encryption? + If you are planning an implementation, would you like to explore how XEX transitions into XTS mode with + ciphertext stealing, or do you need help with performance considerations for disk encryption? AI responses may include mistakes. - - [1] https://csrc.nist.gov/projects/block-cipher-techniques/BCM - [2] https://web.cs.ucdavis.edu/~rogaway/papers/modes.pdf - [3] https://www.truecrypt.org/docs/modes-of-operation - [4] https://eprint.iacr.org/2015/1049.pdf - [5] https://en.wikipedia.org/wiki/Xor%E2%80%93encrypt%E2%80%93xor - [6] https://onlinedocs.microchip.com/oxy/GUID-4D282FC5-82FC-4934-8BAD-D4A5D8422E6C-en-US-7/GUID-3B9716A2-235B-4606-9FA3-559A7958BC36.html - [7] https://fiveable.me/lists/block-cipher-modes-of-operation - [8] https://www.sciencedirect.com/topics/computer-science/block-cipher-mode - [9] https://www.securview.com/ai-security-essentials/xts-aes - [10] https://www.youtube.com/watch?v=gUNyXs6mEKM - [11] https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation - [12] https://dl.acm.org/doi/10.1145/937527.937529 - [13] https://www.ibm.com/docs/en/linux-on-systems?topic=planning-cipher-mode-considerations + citations: + 1: https://csrc.nist.gov/projects/block-cipher-techniques/BCM + 2: https://web.cs.ucdavis.edu/~rogaway/papers/modes.pdf + 3: https://www.truecrypt.org/docs/modes-of-operation + 4: https://eprint.iacr.org/2015/1049.pdf + 5: https://en.wikipedia.org/wiki/Xor%E2%80%93encrypt%E2%80%93xor + 6: https://onlinedocs.microchip.com/oxy/GUID-4D282FC5-82FC-4934-8BAD-D4A5D8422E6C-en-US-7/GUID-3B9716A2-235B-4606-9FA3-559A7958BC36.html + 7: https://fiveable.me/lists/block-cipher-modes-of-operation + 8: https://www.sciencedirect.com/topics/computer-science/block-cipher-mode + 9: https://www.securview.com/ai-security-essentials/xts-aes + 10: https://www.youtube.com/watch?v=gUNyXs6mEKM + 11: https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation + 12: https://dl.acm.org/doi/10.1145/937527.937529 + 13: https://www.ibm.com/docs/en/linux-on-systems?topic=planning-cipher-mode-considerations From 954c93ab10b1d489e4b164e541630323c3128ea9 Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Tue, 11 Aug 2026 19:19:53 -0700 Subject: [PATCH 6/7] Single instance curves --- .idea/apple-knowledge.iml | 6 +- Gemfile | 2 + Gemfile.lock | 37 ++- _data/asn1/ANSI-X9-62.asn | 385 +++++++++++++++++++++++ _data/curves/hashes.yml | 637 ++++++++++++++++++++++++++++++++++++++ _data/pki.yaml | 3 +- tasks/curves.rake | 55 ++++ 7 files changed, 1108 insertions(+), 17 deletions(-) create mode 100644 _data/asn1/ANSI-X9-62.asn create mode 100644 _data/curves/hashes.yml create mode 100644 tasks/curves.rake diff --git a/.idea/apple-knowledge.iml b/.idea/apple-knowledge.iml index a596201a..90f52860 100644 --- a/.idea/apple-knowledge.iml +++ b/.idea/apple-knowledge.iml @@ -87,7 +87,7 @@ - + @@ -139,6 +139,7 @@ + @@ -185,6 +186,7 @@ + @@ -261,7 +263,7 @@ - + diff --git a/Gemfile b/Gemfile index 7892ba88..383f363c 100644 --- a/Gemfile +++ b/Gemfile @@ -87,6 +87,8 @@ group :development, :test do gem 'typeprof' gem 'typhoeus' gem 'wikicloth' + gem 'merkle-hash-tree' + gem 'deepsort' end # rubocop:enable Metrics/BlockLength diff --git a/Gemfile.lock b/Gemfile.lock index 7a904f6b..5c042a65 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -46,7 +46,7 @@ GEM uri (>= 0.13.1) addressable (2.9.0) public_suffix (>= 2.0.2, < 8.0) - asn_parser (1.0.6) + asn_parser (1.0.8) rice (~> 4.0) ast (2.4.3) awesome_print (1.9.2) @@ -94,6 +94,7 @@ GEM thor typhoeus uri_template + deepsort (0.5.0) diff-lcs (1.6.2) domain_name (0.6.20240107) dotenv (3.2.0) @@ -152,6 +153,7 @@ GEM fileutils (1.8.0) forwardable (1.4.0) forwardable-extended (2.6.0) + git-version-bump (0.19.1) google-protobuf (4.35.1-aarch64-linux-gnu) bigdecimal rake (~> 13.3) @@ -286,6 +288,8 @@ GEM faraday-multipart faraday-retry mercenary (0.4.0) + merkle-hash-tree (0.1.1) + git-version-bump merkle_tree (0.2.0) method_source (1.1.0) mime-types (3.7.0) @@ -470,12 +474,12 @@ GEM shale (1.2.2) bigdecimal sorbet-runtime (0.6.13421) - sqlite3 (2.9.5-aarch64-linux-gnu) - sqlite3 (2.9.5-aarch64-linux-musl) - sqlite3 (2.9.5-arm64-darwin) - sqlite3 (2.9.5-x86_64-darwin) - sqlite3 (2.9.5-x86_64-linux-gnu) - sqlite3 (2.9.5-x86_64-linux-musl) + sqlite3 (2.9.6-aarch64-linux-gnu) + sqlite3 (2.9.6-aarch64-linux-musl) + sqlite3 (2.9.6-arm64-darwin) + sqlite3 (2.9.6-x86_64-darwin) + sqlite3 (2.9.6-x86_64-linux-gnu) + sqlite3 (2.9.6-x86_64-linux-musl) steep (2.0.0) concurrent-ruby (>= 1.1.10) csv (>= 3.0.9) @@ -548,6 +552,7 @@ DEPENDENCIES bundle-audit byebug cid + deepsort dotenv-rails eth faraday (~> 2.5) @@ -573,6 +578,7 @@ DEPENDENCIES manpages mdl mediawiki_api + merkle-hash-tree merkle_tree multibases multicodecs @@ -609,7 +615,7 @@ CHECKSUMS activesupport (8.1.3.1) sha256=85458765f25ea48b9019c46b6bb3fa5683197bf4280d9f06710a6e8d7a831376 addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af apple-data (1.0.654) - asn_parser (1.0.6) sha256=3ac4bd31e54c7787602b3089d51e90e234be72a5e4d17be7592d5ba876a3cb06 + asn_parser (1.0.8) sha256=13ea66b750de0302ed293adcda1a961644778385807de86ef65b9552626f6d2f ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 awesome_print (1.9.2) sha256=e99b32b704acff16d768b3468680793ced40bfdc4537eb07e06a4be11133786e base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b @@ -634,6 +640,7 @@ CHECKSUMS crass (1.0.7) sha256=94868719948664c89ddcaf0a37c65048413dfcb1c869470a5f7a7ceb5390b295 csv (3.3.6) sha256=aba61e7e507a66f03d45cb1f3c4b6359861c3504038b422962875dce099e4456 csvlint (0.3.2) sha256=6eb98cfa35267b21e500bb5362e00d759cc8e98235d1602fe6d5d5fb1ea55db8 + deepsort (0.5.0) sha256=8db57207449e54d693e250bc3d62c2e92724602b0f4d680fa846021934f6419f diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962 domain_name (0.6.20240107) sha256=5f693b2215708476517479bf2b3802e49068ad82167bcd2286f899536a17d933 dotenv (3.2.0) sha256=e375b83121ea7ca4ce20f214740076129ab8514cd81378161f11c03853fe619d @@ -665,6 +672,7 @@ CHECKSUMS fileutils (1.8.0) sha256=8c6b1df54e2540bdb2f39258f08af78853aa70bad52b4d394bbc6424593c6e02 forwardable (1.4.0) sha256=f1cd40cc9812937980e1c76f1aa053660990a7c9b6a98fc37d945468afcce838 forwardable-extended (2.6.0) sha256=1bec948c469bbddfadeb3bd90eb8c85f6e627a412a3e852acfd7eaedbac3ec97 + git-version-bump (0.19.1) sha256=7bd9de0b0fc810ed27a32d8581d22d828b2ea9f0670ec584b5e4a04ea133e8bb google-protobuf (4.35.1-aarch64-linux-gnu) sha256=50ca44d0eeff3f8475e630a1accdd974256f3510694d574e2c9d6119ea8bc9e1 google-protobuf (4.35.1-aarch64-linux-musl) sha256=d5c65cef6bd6498a9e5ed5f88cf6cf7e341c10b0a005e32137d5d1a2b6e8c18a google-protobuf (4.35.1-arm64-darwin) sha256=d9c957df04fa89c749fa9a72a7b383eb4296efc9b2303dc6fd6fbe39c698ad6b @@ -716,6 +724,7 @@ CHECKSUMS mdl (0.18.1) sha256=14c7ab8264bbeac4010bd54adb5d125cf1d29b3848c3b6bfacb239b8bc70037a mediawiki_api (0.9.0) sha256=a4d77e35f8f608b923657da5f284a2b7beb130f443db910a0c10f3ca1641d1d3 mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 + merkle-hash-tree (0.1.1) sha256=6493395740eb5122b24f42c62a4df30a02804efd9d1261bda843d4e7da7d3137 merkle_tree (0.2.0) sha256=12c8d37085edf856022434a49e397877a7772316c13d801ecb750f5c498416f1 method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 mime-types (3.7.0) sha256=dcebf61c246f08e15a4de34e386ebe8233791e868564a470c3fe77c00eed5e56 @@ -802,12 +811,12 @@ CHECKSUMS securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 shale (1.2.2) sha256=e298bd0658e2651c76a1a4ffc7db8d43592288181d28d78ce5748c8525094cca sorbet-runtime (0.6.13421) sha256=a19fac29c0f9dde55ab203ddc57c0e6f68d644ef951e09f41a092cc64cce5262 - sqlite3 (2.9.5-aarch64-linux-gnu) sha256=78075b6337d3d182c6d2b4691049ed45cd220826160c9ea18946bf6a1de200dc - sqlite3 (2.9.5-aarch64-linux-musl) sha256=18c801185deb4adc01ddb281e8f672a39e3d1729979ca91e39439cd3eac0402d - sqlite3 (2.9.5-arm64-darwin) sha256=d0cf444a70fc9395d513cfbcc1e6719e224aa645314e3824cb0474c721425aa2 - sqlite3 (2.9.5-x86_64-darwin) sha256=8e9caae38bd7ebb29cbeee3e7ab1d12dc2327d9a1b92c7fcf0dda05589627a81 - sqlite3 (2.9.5-x86_64-linux-gnu) sha256=233dbcb6714148dd23bc5aeb33e8efd6eac974969564ddd5794c23d5f52b231e - sqlite3 (2.9.5-x86_64-linux-musl) sha256=e7d3a7474e8af0f96150c21abc203fbab5437206bfcdf11deab7741c0ca516f2 + sqlite3 (2.9.6-aarch64-linux-gnu) sha256=d8b1f7d23efd7abac285775a9566562fc7debfef79d594e3a20354406fb7907c + sqlite3 (2.9.6-aarch64-linux-musl) sha256=3579e1c98cdc7ff5c3722847bb63ed4e1efb7ff675cb5e1e48ef2d4da5fb3bc9 + sqlite3 (2.9.6-arm64-darwin) sha256=849b5d7f795e60fe25076d62c72dd722beb45b3850b516ad978d60ee848ec15b + sqlite3 (2.9.6-x86_64-darwin) sha256=b5842fea77781c14da03fa7bc0feb82db03a69e135affcb6f5399cbd2797a5f3 + sqlite3 (2.9.6-x86_64-linux-gnu) sha256=613188ce02f614126ddbc38c5e217ccffd6306d0dcd9adca9764547aa890a634 + sqlite3 (2.9.6-x86_64-linux-musl) sha256=d493b11818a3573387a1d56e1ee8fa00da23a683a7a1cc063e7a0feeed843abf steep (2.0.0) sha256=6eb0ecc09637bbb54f0a5f2cf63daea6d3208ccace64b4f1107d976333605c30 strptime (0.2.5) sha256=98ed77ff7717a47387ba473614f478e78b162d70a64072fd71d54f547e079af9 strscan (3.1.8) sha256=aae2db611a225559f21ffbb71765c9a4e60fd262534a9ea84f4f11c7f32f679e diff --git a/_data/asn1/ANSI-X9-62.asn b/_data/asn1/ANSI-X9-62.asn new file mode 100644 index 00000000..c6dacfea --- /dev/null +++ b/_data/asn1/ANSI-X9-62.asn @@ -0,0 +1,385 @@ +-- ASN module extracted from ITU-T X.894 (10/2018) +-- 22 Module ANSI-X9-62 +ANSI-X9-62 {iso (1) member-body (2) us (840) 10045 module (0) 2} +DEFINITIONS EXPLICIT TAGS ::= BEGIN + +-- EXPORTS All; +-- IMPORTS None; +-- ============================================ +-- Notes +-- ============================================ +-- 1. Definitions in this module are arranged to minimize forward references, +-- Reading backwards gives a top-down approach more like X9.62-1998. +-- 2. Most comments briefly explain subsequent definition. +-- ============================================ +-- Common Object Identifier (see E.2) +-- ============================================ +-- The root OID for this module. +ansi-X9-62 OBJECT IDENTIFIER ::= {iso (1) member-body (2) us (840) 10045} + +-- ============================================ +-- Definition for Algorithm Identifiers (see E.3) +-- ============================================ +-- Information object class used to for algorithm identifiers. +-- Note: Original X9.62-1998 was TYPE-IDENTIFIER +-- New version here agrees with X9.63-2001 +ALGORITHM ::= CLASS { + &id OBJECT IDENTIFIER UNIQUE, + &Type OPTIONAL +} +WITH SYNTAX { + OID &id [PARMS &Type] +} + +-- X9.62 profile of a common ASN.1 type AlgorithmIdentifier, +-- The X9.62 version is a parameterized type, to allow restrictions. +AlgorithmIdentifier {ALGORITHM: IOSet} ::= SEQUENCE { + algorithm ALGORITHM.&id ({IOSet}), + parameters ALGORITHM.&Type ({IOSet} {@algorithm}) OPTIONAL +} + +-- ============================================ +-- Hash Functions (see E.4) +-- ============================================ +-- Inherited OID for SHA1 +sha-1 OBJECT IDENTIFIER ::= {iso (1) identified-organization (3) oiw (14) secsig (3) algorithm (2) 26} + +-- New OID for SHA224 +id-SHA224 OBJECT IDENTIFIER ::= {joint-iso-itu-t (2) country (16) us (840) organization (1) gov (101) csor (3) nistalgorithm (4) hashalgs (2) 4} + +-- Inherited OID for SHA256 +id-SHA256 OBJECT IDENTIFIER ::= {joint-iso-itu-t (2) country (16) us (840) organization (1) gov (101) csor (3) nistalgorithm (4) hashalgs (2) 1} + +-- Inherited OID for SHA384 +id-SHA384 OBJECT IDENTIFIER ::= {joint-iso-itu-t (2) country (16) us (840) organization (1) gov (101) csor (3) nistalgorithm (4) hashalgs (2) 2} + +-- Inherited OID for SHA512 +id-SHA512 OBJECT IDENTIFIER ::= {joint-iso-itu-t (2) country (16) us (840) organization (1) gov (101) csor (3) nistalgorithm (4) hashalgs (2) 3} + +-- Information object set of Approved hash functions +ANSIX9HashFunctions ALGORITHM ::= { + {OID sha-1} | + {OID sha-1 PARMS NULL} | + {OID id-SHA224} | + {OID id-SHA224 PARMS NULL} | + {OID id-SHA256} | + {OID id-SHA256 PARMS NULL} | + {OID id-SHA384} | + {OID id-SHA384 PARMS NULL} | + {OID id-SHA512} | + {OID id-SHA512 PARMS NULL}, + ... -- Additional hash functions may be added +} + +-- Type (parameterized) to indicate the hash function with +-- the OID ecdsa-with-Specified +HashAlgorithm ::= AlgorithmIdentifier {{ANSIX9HashFunctions}} + +-- ============================================ +-- Finite Field Identification (see E.5) +-- ============================================ +-- Finite field element +FieldElement ::= OCTET STRING + +-- Root OID for identifying field types +id-fieldType OBJECT IDENTIFIER ::= {ansi-X9-62 fieldType (1)} + +-- OID identifying prime field types +prime-field OBJECT IDENTIFIER ::= {id-fieldType prime (1)} + +-- Parameters for prime field +Prime-p ::= INTEGER -- Finite field F(p), where p is an odd prime + +-- OID for identifying binary field +characteristic-two-field OBJECT IDENTIFIER ::= {id-fieldType characteristic-two (2)} + +-- Root OID for identifying binary field basis types +id-characteristic-two-basis OBJECT IDENTIFIER ::= {characteristic-two-field basisType (3)} + +-- OID to identify a Gaussian normal basis. +gnBasis OBJECT IDENTIFIER ::= {id-characteristic-two-basis gaussian (1)} + +-- OID to identify a trinomial basis. +tpBasis OBJECT IDENTIFIER ::= {id-characteristic-two-basis trinomial (2)} + +-- Trinomial basis representation of F2^m +-- Integer k for reduction polynomial x^m + x^k + 1 +Trinomial ::= INTEGER + +-- OID to identify a pentanomial basis. +ppBasis OBJECT IDENTIFIER ::= {id-characteristic-two-basis pentanomial (3)} + +-- Pentanomial basis representation of F2^m +-- reduction polynomial integers k1, k2, k3 +-- f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 +Pentanomial ::= SEQUENCE { + k1 INTEGER, + k2 INTEGER, + k3 INTEGER +} + +-- The object class for binary field basis types +CHARACTERISTIC-TWO ::= TYPE-IDENTIFIER + +-- Allowable basis types are given the following info object set +BasisTypes CHARACTERISTIC-TWO ::= { + {NULL IDENTIFIED BY gnBasis} | + {Trinomial IDENTIFIED BY tpBasis} | + {Pentanomial IDENTIFIED BY ppBasis}, + ... -- Additional basis types may be added +} + +-- Parameters for a binary field +Characteristic-two ::= SEQUENCE { + m INTEGER, -- Field size is 2^m + basis CHARACTERISTIC-TWO.&id ({BasisTypes}), + parameters CHARACTERISTIC-TWO.&Type ({BasisTypes} {@basis}) +} + +-- Information object class used to constrain fields +FIELD-ID ::= TYPE-IDENTIFIER -- ISO/IEC 8824-2:1995(E), Annex A + +-- Field types are constrained with this information object set +FieldTypes FIELD-ID ::= { + {Prime-p IDENTIFIED BY prime-field} | + {Characteristic-two IDENTIFIED BY characteristic-two-field}, + ... -- Additional field types may be added +} + +-- Finite fields have a type (prime or binary) and parameters (size and basis) +FieldID {FIELD-ID: IOSet} ::= SEQUENCE { -- Finite field + fieldType FIELD-ID.&id ({IOSet}), + parameters FIELD-ID.&Type ({IOSet} {@fieldType}) +} + +-- ============================================ +-- Elliptic Curve Points (see E.6) +-- ============================================ +ECPoint ::= OCTET STRING + +-- ============================================ +-- Elliptic Curve Domain Parameters (see E.7) +-- ============================================ +-- Identifying an elliptic curve by its coefficients (and optional seed) +Curve ::= SEQUENCE { + a FieldElement, -- Elliptic curve coefficient a + b FieldElement, -- Elliptic curve coefficient b + seed BIT STRING OPTIONAL +-- Shall be present if used in SpecifiedECDomain with version of +-- ecdpVer2 or ecdpVer3 +} + +-- Type used to control version of EC domain parameters +SpecifiedECDomainVersion ::= INTEGER { + ecdpVer1 (1), + ecdpVer2 (2), + ecdpVer3 (3) + } + +-- Identifying elliptic curve domain parameters explicitly with this type +SpecifiedECDomain ::= SEQUENCE { + version SpecifiedECDomainVersion (ecdpVer1 | ecdpVer2 | ecdpVer3), + fieldID FieldID {{FieldTypes}}, + curve Curve, + base ECPoint, -- Base point G + order INTEGER, -- Order n of the base point + cofactor INTEGER OPTIONAL, -- The integer h = #E(Fq)/n + hash HashAlgorithm OPTIONAL, + ... -- Additional parameters may be added +} + +-- Arc in X9.62 for naming EC domain parameters that are not named elsewhere +ellipticCurve OBJECT IDENTIFIER ::= {ansi-X9-62 curves (3)} + +-- Arc in X9.62 for identifying prime order elliptic curve domain parameters +primeCurve OBJECT IDENTIFIER ::= {ellipticCurve prime (1)} + +-- Arc from SEC2 that names EC domain parameters and is used again in X9.62 +secgCurve OBJECT IDENTIFIER ::= {iso (1) identified-organization (3) certicom (132) curve (0)} + +-- Named EC domain parameters in X9.62 +ansix9t163k1 OBJECT IDENTIFIER ::= {secgCurve 1} + +ansix9t163r1 OBJECT IDENTIFIER ::= {secgCurve 2} + +ansix9t163r2 OBJECT IDENTIFIER ::= {secgCurve 15} + +ansix9t193r1 OBJECT IDENTIFIER ::= {secgCurve 24} + +ansix9t193r2 OBJECT IDENTIFIER ::= {secgCurve 25} + +ansix9t233k1 OBJECT IDENTIFIER ::= {secgCurve 26} + +ansix9t233r1 OBJECT IDENTIFIER ::= {secgCurve 27} + +ansix9t239k1 OBJECT IDENTIFIER ::= {secgCurve 3} + +ansix9t283k1 OBJECT IDENTIFIER ::= {secgCurve 16} + +ansix9t283r1 OBJECT IDENTIFIER ::= {secgCurve 17} + +ansix9t409k1 OBJECT IDENTIFIER ::= {secgCurve 36} + +ansix9t409r1 OBJECT IDENTIFIER ::= {secgCurve 37} + +ansix9t571k1 OBJECT IDENTIFIER ::= {secgCurve 38} + +ansix9t571r1 OBJECT IDENTIFIER ::= {secgCurve 39} + +ansix9p160k1 OBJECT IDENTIFIER ::= {secgCurve 9} + +ansix9p160r1 OBJECT IDENTIFIER ::= {secgCurve 8} + +ansix9p160r2 OBJECT IDENTIFIER ::= {secgCurve 30} + +ansix9p192k1 OBJECT IDENTIFIER ::= {secgCurve 31} + +ansix9p192r1 OBJECT IDENTIFIER ::= {primeCurve 1} + +ansix9p224k1 OBJECT IDENTIFIER ::= {secgCurve 32} + +ansix9p224r1 OBJECT IDENTIFIER ::= {secgCurve 33} + +ansix9p256k1 OBJECT IDENTIFIER ::= {secgCurve 10} + +ansix9p256r1 OBJECT IDENTIFIER ::= {primeCurve 7} + +ansix9p384r1 OBJECT IDENTIFIER ::= {secgCurve 34} + +ansix9p521r1 OBJECT IDENTIFIER ::= {secgCurve 35} + +-- The object class and syntax for naming elliptic curve domain parameters. +ECDOMAIN ::= CLASS { + &id OBJECT IDENTIFIER UNIQUE +} +WITH SYNTAX { + ID &id +} + +-- Information object set for named elliptic curve domain parameter +ANSIX9NamedDomains ECDOMAIN ::= { + {ID ansix9t163k1} | -- L.5.2.2 + {ID ansix9t163r2} | -- L.5.2.3 + {ID ansix9t233k1} | -- L.5.3.2 + {ID ansix9t233r1} | -- L.5.3.3 + {ID ansix9t283k1} | -- L.5.4.2 + {ID ansix9t283r1} | -- L.5.4.3 + {ID ansix9t409k1} | -- L.5.5.2 + {ID ansix9t409r1} | -- L.5.5.3 + {ID ansix9t571k1} | -- L.5.6.2 + {ID ansix9t571r1} | -- L.5.6.3 + {ID ansix9p192k1} | -- L.6.2.2 + {ID ansix9p192r1} | -- L.6.2.3 + {ID ansix9p224k1} | -- L.6.3.2 + {ID ansix9p224r1} | -- L.6.3.3 + {ID ansix9p256k1} | -- L.6.4.2 + {ID ansix9p256r1} | -- L.6.4.3 + {ID ansix9p384r1} | -- L.6.5.2 + {ID ansix9p521r1}, -- L.6.6.2 + ... -- Additional named EC domain parameters may be added. +} + +-- Type for identifying elliptic curve domain parameters +ECDomainParameters ::= CHOICE { + specified SpecifiedECDomain, -- Full specification + named ECDOMAIN.&id ({ANSIX9NamedDomains}), -- Named + implicitCA NULL -- Parameters same as issuer CA +} + +-- ============================================ +-- Elliptic Curve Digital Signatures (see E.8) +-- ============================================ +-- Format for an actual signature +ECDSA-Sig-Value ::= SEQUENCE { + r INTEGER, + s INTEGER +} + +-- Root OID to identify types of signatures +id-ecSigType OBJECT IDENTIFIER ::= {ansi-X9-62 signatures (4)} + +-- Original X9.62-1998 OID for ECDSA +ecdsa-with-Sha1 OBJECT IDENTIFIER ::= {id-ecSigType sha1 (1)} + +-- New OID indicating the message digest to be the natural size hash +-- Note: the natural size hash is strongly recommended +ecdsa-with-Recommended OBJECT IDENTIFIER ::= {id-ecSigType recommended (2)} + +-- New OID that indicates the message digest to be specified by the parameters +ecdsa-with-Specified OBJECT IDENTIFIER ::= {id-ecSigType specified (3)} + +-- New OIDs that indicates the message digest directly +ecdsa-with-Sha224 OBJECT IDENTIFIER ::= {ecdsa-with-Specified 1} + +ecdsa-with-Sha256 OBJECT IDENTIFIER ::= {ecdsa-with-Specified 2} + +ecdsa-with-Sha384 OBJECT IDENTIFIER ::= {ecdsa-with-Specified 3} + +ecdsa-with-Sha512 OBJECT IDENTIFIER ::= {ecdsa-with-Specified 4} + +-- An information object set used to constrain ECC algorithms +ECCAlgorithmSet ALGORITHM ::= { + {OID ecdsa-with-Sha1} | + {OID ecdsa-with-Sha1 PARMS NULL} | + {OID ecdsa-with-Recommended} | + {OID ecdsa-with-Recommended PARMS NULL} | + {OID ecdsa-with-Specified PARMS HashAlgorithm} | + {OID ecdsa-with-Sha224} | + {OID ecdsa-with-Sha256} | + {OID ecdsa-with-Sha384} | + {OID ecdsa-with-Sha512}, + ... -- More ECC algorithms might be added, including key agreement. +} + +-- A type identifying an ECC algorithm +ECCAlgorithm ::= AlgorithmIdentifier {{ECCAlgorithmSet}} + +-- A type identifying one or more ECC algorithms with possible preference +ECCAlgorithms ::= SEQUENCE OF ECCAlgorithm + +-- ============================================ +-- Elliptic Curve Public Keys (see E.9) +-- ============================================ +-- Root OID for identifying types of public keys for X9.62 +id-publicKeyType OBJECT IDENTIFIER ::= {ansi-X9-62 keyType (2)} + +-- Original X9.62-1998 OID for identifying unrestricted EC public key +id-ecPublicKey OBJECT IDENTIFIER ::= {id-publicKeyType unrestricted (1)} + +-- Algorithm identifier (original X9.62-1998) for +-- EC public key without restrictions +ecPublicKeyType ALGORITHM ::= {OID id-ecPublicKey PARMS DomainParameters} + +-- New OID for identifying EC public key with algorithm restrictions +id-ecPublicKeyRestricted OBJECT IDENTIFIER ::= {id-publicKeyType restricted (2)} + +-- Type identified by id-ecPublicKeyRestricted +ECPKRestrictions ::= SEQUENCE { + ecDomain ECDomainParameters, + -- Identifies the EC domain parameters + eccAlgorithms ECCAlgorithms -- Lists the algorithms supported +-- for this public key +} + +-- Algorithm identifier (new) with feature to restrict algorithm usage. +ecPublicKeyTypeRestricted ALGORITHM ::= {OID id-ecPublicKeyRestricted PARMS ECPKRestrictions} + +-- Information object set of allowable algorithm identifiers +-- in a SubjectPublicKeyInfo of a certificate +ECPKAlgorithms ALGORITHM ::= { + ecPublicKeyType | + ecPublicKeyTypeRestricted, + ... -- Additional algorithm identifiers may be added +} + +-- An instantiation of Alg. Id. +ECPKAlgorithm ::= AlgorithmIdentifier {{ECPKAlgorithms}} + +-- X9.62 profile of an X.509 (ASN.1) field contained +-- in X.509 and PKIX certificates +SubjectPublicKeyInfo ::= SEQUENCE { + algorithm ECPKAlgorithm, + subjectPublicKey BIT STRING +} + +END -- ANSI X9.62 \ No newline at end of file diff --git a/_data/curves/hashes.yml b/_data/curves/hashes.yml new file mode 100644 index 00000000..6b322643 --- /dev/null +++ b/_data/curves/hashes.yml @@ -0,0 +1,637 @@ +--- +4c51706cce6da427f736494dec9197fa9328baa3ca31ee9e402f92e02c524bf4: + names: + - FRP256v1 +d174cff233fc1adf98270cf2e05df04b831ad02c656a40a20f0b5c5e414631ec: + names: + - BLS12-377 +3be03afa32710ff41c828393cb508980b29d3ee8cd4616320b376c0d81817921: + names: + - BLS12-381 +d29e1eff3c65cfad50537e5b9fce901b0700f20c6137279525f9280ce38dbd3c: + names: + - BLS12-446 +e273957a92927e6a38967ce3c7e111444519a1b120fa38b5daee05708be5a586: + names: + - BLS12-455 +542dc74b08d7d495fdda7e5f422171a8345d613a2ff1429d0d67bce663f1eac4: + names: + - BLS12-638 +701d1c0019040abcd5b4f2bd89bf979145e3c578362c2f4fb076a0722845089f: + names: + - BLS24-477 +4abc26ddefd2934f61cc681a34fc1bab7c0b106af438db6dbf83a10a1e844d46: + names: + - Bandersnatch +a776ecf15ac8e22cc224771619cff661cebb0aead34629878a3b23760ca61cb6: + names: + - BLS48-581-G1 +fdb82592198b4a8cee8a9ec330406eff993172b99f6e12ff437eb38772e93221: + names: + - BLS48-581-G2 +93d80f47edb8b32c733180de9cafc32f482439812c76598382b8c34e14d12b2d: + names: + - bn158 +8257e3543414ba272493aaafea5f38d85d3f1c1ee48b091c48da92765e6e4b63: + names: + - bn190 +cac16310e3833c81bc3ac0553d7eea2a5fe2d213bab2a91fe522be4adc3f30a4: + names: + - bn222 +337e386c5d90c1e958a85c4350093463fc1071a7d2276bfb3821d59aa8738010: + names: + - bn254 + - Fp254BNb +f3eac0da985f25dbed03b2a1bffee59f4acdfcb9656238f8998e5aebac6d8731: + names: + - bn286 +60bbfc7d39ccf9c49ae6caff89bc3afe2a18ae1a2c398d7d396b4ed92b275c85: + names: + - bn318 +61188779155fdc1be08b26ea72234be852c0cfaa795b86562a0c0b6e58ab1aab: + names: + - bn350 +db15cc1ea53420b60f2a90c45c5148bb9088f37acfae56cee793a0ac8e5a91d9: + names: + - bn382 +acbd252a68627ad707a267d21abf5f225ad3db390cd3b447caca13b3188a8747: + names: + - bn414 +015b429d3030e8d4a898db83f4bdc2a5741b7fd3e02fa714dc77084854056067: + names: + - bn446 +282b1fda2d8e70f6895cd02b9b8c2f6a8dbbdad96896b17d4c5a164a03936d90: + names: + - bn478 +c357f91bafbfdde8b1edc3ba989c0fe58ddfbb5caecf3c58d4c871f0d0c8ca96: + names: + - bn510 +b73278c40957ffdfa27376c832124e85e047af7673836a3c8f85a2cf2721e053: + names: + - bn542 +61f6f1c01de9144f0ccee42ae68b29e10ef5d3ff5e7f420d5b55ab159f31aaaa: + names: + - bn574 +5160d97c15ed47d0ab83a390d4a98c9f6ad7e2451047528a56987ce49e8d4d99: + names: + - bn606 +ef1b2993125107b4600112392907e5f127dbec80f7946062a5df9ff005745a67: + names: + - bn638 +f2f603b1176a9fe83fab2bcc92a3b8d76aab681ebc880659f885445bea13415a: + names: + - brainpoolP160r1 +bbd0c469e21e40e9687d2b400077eee2a7cc6fd4eb5677fe8e0a42f2606b8238: + names: + - brainpoolP160t1 +2ee20726dbd836c83ba89bb87c7e2f9d7e8a8539c211bb58d6948eac3e9d08f9: + names: + - brainpoolP192r1 +26d4450026dcf82695bbe82d9d597caecf6e333d13f5eaac222ee8ed65104def: + names: + - brainpoolP192t1 +1eb1e3a9f3a543cbb910b6f9046227d9e66a62f3d63cd956ade57ab2d9595715: + names: + - brainpoolP224r1 +48f0ae93cddae909fc7ae3de277bcf0aee808260d8c9798b889bceb71886a582: + names: + - brainpoolP224t1 +53a908a302f4df79de61e21e39fcb746109ad54d223f50b4024fba80e74519f4: + names: + - brainpoolP256r1 +322cad5321c7a801b053db82072db0afcd03cffd05d5ae2dfaa17f27a8aaa127: + names: + - brainpoolP256t1 +2ca0cac563ff347f2f8f728c864bf34fe5517f49ef803f276475c64a0c0649f0: + names: + - brainpoolP320r1 +cf42dccf1eca457fd251dbba51a6e6521e1c0a3ca8242da7e0be6e1cfcc54cb0: + names: + - brainpoolP320t1 +4fbb84e21ec4f7912d3ef99e8544b45df1715b143d141bba3ecd28510a7f5817: + names: + - brainpoolP384r1 +262e6a47f555ea0320c0bee6e3b7316d104bb971a02fa14714e3e5c05a14dc55: + names: + - brainpoolP384t1 +a3eaafb5587210844ddf92b135b2a5746cd27ed8feb622122f1b783bf7b2f4b5: + names: + - brainpoolP512r1 +ef91c00f3e5c5d98f9aa076a81141a6892dd85b42896b591dd6e94810cfa0255: + names: + - brainpoolP512t1 +bd46e77f3328ddc23e433356081e8b87235f330c13343d745e63ad5e87cb6f58: + names: + - gost256 +96856a2ad573020de74e060236fd2557d80b0099667352c5d4ab9a1567226434: + names: + - gost512 +222345c039189479160f653b4c18a499b62347d9936303bcb34d6564fc97b066: + names: + - id-tc26-gost-3410-12-512-paramSetA +aa2e485f0bc64a06e930a1fe5b5b4a8379d420fd777e3d7503156f4ba3160bd1: + names: + - id-tc26-gost-3410-12-512-paramSetB +bb2a0c21c305fdb01f2620b591f17818a05ce6f546a626a9f0da81bd96278590: + names: + - id-GostR3410-2001-CryptoPro-A-ParamSet +e868d43638c89a62cea5bbeaa2c52b6c2edf079fcfd8915c240510a9e2d508c7: + names: + - id-GostR3410-2001-CryptoPro-B-ParamSet +1fe2431fa5f4a7f4a9ae96a724b1f94fb6124bc3b609b913c351f45ed4f83c8a: + names: + - id-GostR3410-2001-CryptoPro-C-ParamSet +17f57822d6ae34ff632f459ad1b41a5bc72f705fcbc90d3a645d8fcceb78f332: + names: + - id-tc26-gost-3410-2012-256-paramSetA +e7ff46b256c080686c6ed04250ee7c67fefb153879dd122cdfea2b344e2b32d2: + names: + - id-tc26-gost-3410-2012-512-paramSetC +de61bac7ab935d971fb0fe3357d8fb52bfddc762332d4a9b8ab35a1304c5d20c: + names: + - mnt1 +b07d7330b0d490c280e2af27361c5cf9f4e835d89a8152dc1bf7d1617c208498: + names: + - mnt2_1 +fe0eaee76c1cefdd669c8bdd25df18b9cdc0d2e3f72573dbedecdc99ecf191e9: + names: + - mnt2_2 +0a638ae9b2b74a05d174d572e6f322642213526c3ce43c652e35a8cd1a504a15: + names: + - mnt3_1 +aad4b5be1211cd78704ae931601e971b09aacf5421ed6c795e7ce6cb6aa71da3: + names: + - mnt3_2 +2913f5c847c0770383c9487657c2461d4cc77dc6573f72fbc7bf003e55cd903c: + names: + - mnt3_3 +7ed9553f3d21e4bdbe9ab466474837f0bd3b250fa89f010f9b8ac56416e36a93: + names: + - mnt4 +433d6ce78991632e7643d29627628844acb153c795585e258497793ea1caec2a: + names: + - mnt5_1 +6b4da477f61b460574a662566e03c18d93bd3d59e90c9a1a808f6c6554fe847d: + names: + - mnt5_2 +5fee9a730ebd1a176a562efe59b8d41dd4b126568d41b67b9918dc84e7239d9a: + names: + - mnt5_3 +b33c320da3c257ce42467d3b674b0d656a1da6eefabd45888e4d221f749dc96e: + names: + - P-192 + - 192-bit Random ECP Group + - secp192r1 + - prime192v1 +36789bdd8aabe91d9dc2f32f1543e4108c56f36211fc8db2e70743c69121bb9d: + names: + - P-224 + - 224-bit Random ECP Group + - secp224r1 + - wap-wsg-idm-ecid-wtls12 + - ansip224r1 +96220b970f58e631791053c24fd0b73da918b317984de9593ea0b97fdbf69acd: + names: + - P-256 + - 256-bit Random ECP Group + - secp256r1 + - prime256v1 +7329a99a6b22cdcb02439378519905186dfdf8d9edcaaeb9d02580ed41263392: + names: + - P-384 + - 384-bit Random ECP Group + - secp384r1 + - ansip384r1 +b3574a02ac1b209aa6cfd700d3b454d7fabcc8713dd411f927a3a45aae722d05: + names: + - P-521 + - 521-bit Random ECP Group + - secp521r1 + - ansip521r1 +983c305b650b95f6f943f84bc723287261a5980e02069d3c52628e01bfd0d009: + names: + - K-163 + - sect163k1 + - wap-wsg-idm-ecid-wtls3 + - ansit163k1 +2f4174db73ccca30a2b56d298e794d01d87d3e9e87985f64f5bcf48dcfe8e020: + names: + - B-163 + - sect163r2 + - ansit163r2 +927fb3755e5a3ad74e7534091fc92509d12cdc0f9c46d4d1d7dce223773c3168: + names: + - K-233 + - sect233k1 + - wap-wsg-idm-ecid-wtls10 + - ansit233k1 +d5881c40056b59a995efa112ace22c25af6347021ea361484e4b74e28d319445: + names: + - B-233 + - sect233r1 + - wap-wsg-idm-ecid-wtls11 + - ansit233r1 +5ddf6e1e1b09abc122ca3a3a2074882374d0436090cb719048435f1f9a27b270: + names: + - K-283 + - sect283k1 + - ansit283k1 +19ccc60865dc70283adfa27c3056327a227207db640decbd5375594f96443688: + names: + - B-283 + - sect283r1 + - ansit283r1 +5ad06e30fa345f13674e386b21720ac827f35cbacfb5163a4ea544aca045e60c: + names: + - K-409 + - sect409k1 + - ansit409k1 +e36aa18cb3619e03e38c6f29894f667db7f866d48ca9d926bb4c54c1950d7abe: + names: + - B-409 + - sect409r1 + - ansit409r1 +036ba0dc2feb5900dedb555cc220c43373fa25e30e67af831d87f35e18dadb95: + names: + - K-571 + - sect571k1 + - ansit571k1 +bd5349da0423cbdbf1f6433478cd3e594d2ccdf926d260cd9980e04aef4c5646: + names: + - B-571 + - sect571r1 + - ansit571r1 +9ac4d84e429ea53fb084aca3ced6baede9c3fd7e0fd2f1af1961b952893a42eb: + names: + - numsp256d1 +a6ee4fb29783e4e49911ecbba771767abb89fca3855192f8a92d45965a151e38: + names: + - numsp256t1 +41e21f03c7106878b7b9547a9efb1906068a17e29793cd0276c5bfa28ccaa253: + names: + - numsp384d1 +64043364ad1219d1799ad0d0dd9445598873ca9e456dc49959778f157136bc2f: + names: + - numsp384t1 +b085bc275200ff0edde34f8ba2a34ebfa9ceff2418a7652475375b599a8f6263: + names: + - numsp512d1 +db4e2c3fe9301769e7ce39f53e219810d66178b3b324e586fff3af8075ce5dbf: + names: + - numsp512t1 +aea77a42ce090418c12ad18a52d26f9d126ab2e80089618b1a0dc1c3fb4e7582: + names: + - ed-256-mont +2677fde5f2a88ef400c5944a07e465afeb919915624b620e2adce804de42da94: + names: + - ed-254-mont +28c588175cb9d9b60e2e0917c9d370be47e0583b22a6600a96148250e4859d44: + names: + - ed-255-mers +'058011f238d00a91fe2fd46a6297a5da4c13e3289c6a6fcd3fc315d4547b4d0e': + names: + - ed-384-mont +b9b96b8de7e9de4ed94ce92030c2c8ade375f0771d81e3b7fa3a8b5dab7fab1b: + names: + - ed-382-mont +4ce17230f0e0e7ed4bd7ac426b63a0c21f722bee454f418f65ddd710ee60d1e2: + names: + - ed-383-mers +1aa1fb802ede4a2974e4fc4b8022134c596b76a1d501f105b16620de766151f5: + names: + - ed-512-mont +19166486235180b11e6db73d60e91d6f447482c14426cff1fd6c67a21137a516: + names: + - ed-510-mont +e284f168dd01149fd8314cd017bfa7665631d190082786dcef9192f54c31ce9e: + names: + - ed-511-mers +85416bf96091f71904873c07fb0a0036dbf9928c695d5467c8367b9fb2d610d3: + names: + - w-256-mont +0e6bd66d03ff9f66265a16cd5375c3829b486e64c0d799fe48d76c331d04052b: + names: + - w-254-mont +e0472527790c40f65c2512b418a4e195622d335dcaa07b24ec8d1a9fb6a748f8: + names: + - w-255-mers +b8bc63e8d6083d93edd028c597e98005934428b4c2b44848c85f1fde9a86f5c3: + names: + - w-384-mont +566d4e5becfbeb4565c8124f3658108df6016e46f03de383f907c7eba82c8b15: + names: + - w-382-mont +9fb32e64ed8b4d9e4e975baa08fb20f7b4698e284861c19a8b650734947ca4ab: + names: + - w-383-mers +dddf09475381cb3ed989b02e00c5396be1b1dbbb78b9a47199ba72f381a12b4d: + names: + - w-512-mont +70815382861bc9f89725ab120013f4fcda598851144c735c969db19449c3aea0: + names: + - w-510-mont +2a3d62589f3f9d722e85c5a1c95435abbecd7c22f77f774dcc409d3131cdf4da: + names: + - w-511-mers +648fdd82831bd65ba4cf0bdaf3e1316664e956e838054a35343583d6648d6bef: + names: + - Oakley Group 3 +262b61117cfb5884159c6069a566136c9806d4354591e3da7a1922ba70f821e7: + names: + - Oakley Group 4 +848889acc30963b2c2ae1bdd8a95b680f32075ba3fefe07e96ade71fcf630c2e: + names: + - SM2 +c45ed96121d651697b6c9b4e6426aa3502c5461cf1c26c3ab3c5098474321c92: + names: + - M-221 +b402ada987eb2ce5f490ee2c96124da39c31252b17f6745136dbd658c77f9371: + names: + - M-383 +7970af1679a5bd081dfeed40e3be4adf75dd86ff7684ecf426d7aad55c48b6c2: + names: + - M-511 +1e94035f33f0f78a7a61dbe19d161aa12ef70e9dd051a286c1434bf0bad34dc8: + names: + - E-222 +2db751c41d107e1fcdeba99861ea4d31949671dd4ec909185a4fd0ac96595090: + names: + - E-382 +bec6c0c586378dc002ab1998b1a687a1cbede358c8fd36558e2b2d0a4f62122f: + names: + - E-521 +f933828a39b044812404b9dfc3efe63b5d654f7d33619bc9253930c19139ad83: + names: + - Curve25519 +4fd59c136badb98ab0069c6f3e38804e2b88e169643c49e18440c3698e0407a3: + names: + - Curve448 +7a8cd97e019e1ff1697adf7ae8a23835f1f54ccbd6466d48c8f203d896db23ba: + names: + - Curve22103 +b67964f260cb9932d91a7537b4908f18025e68224f922d3c6973cacd8dff25b7: + names: + - Curve4417 +'095f5f2cda33c4ef1491dc8c0679220bdcdd371ff5c99fd2d3019775693ae162': + names: + - Curve1174 +45cefccfa11af979114308efce78ea85689aa3742cbcbf8f587ba3d55ee00c58: + names: + - Curve67254 +62c20e482369c0e5a34c700c66671327297693463c9baca668b2b1c4be075637: + names: + - Curve383187 +b53bcee6c9171352dbca145da162bfe3fff812ff2360b6565340ab2dba36fd2e: + names: + - Ed25519 +a53a7e42f99bfa40069d682f9d4486a393e42261ecbe9010eac1ffe5ef1ce85f: + names: + - Ed448 +a6fbddc8902044637263fc9b3ad7da9af5613f3bc1844bf6fd53c2679c286458: + names: + - Ed448-Goldilocks +4e03befe79dfd9257e7761c13f29717cf0f0195882cd7d598a3eba7b1060d824: + names: + - Curve41417 +a7274b645eb1523cdf83977d8f025b07c66cee2e9d515256a45ac6e6ecbe8525: + names: + - Fp254BNa +43be14f890f5ea448df257acacadb2742e0ec33e4d1726de30bb599336462352: + names: + - Fp254n2BNa +9f4fed5f9caece664a40755f46ec4ba3cd730083cb1c7be2626c12fd0b2f2e11: + names: + - Fp224BN +b374493adde78c65902f159562acbb9be99fb55041a78e1f9b256654e4b4e3c9: + names: + - Fp256BN +2c019068020399897a75eceafae0892e9bf878ba3744b856fa3ba65285973239: + names: + - Fp384BN +b777b0362cf5c04d091eb18edfd4690e1acd4aa2b2e407b6f124015160ba10ba: + names: + - Fp512BN +0f8e843e06b27a9d4a7755ce53e205e608a987cb04698672b71a9d0f1d6e7791: + names: + - ssc-160 +90de63402e0677d59c16d67dddc18cb58358fc7e71f11e673e8ae4607b3d8ca3: + names: + - ssc-192 +c7b6730003dde2ed65406a80aa65b3a12057c8a018594e73d6e91b8cd0b57efd: + names: + - ssc-224 +3dc6098180a4b1a159091c15c96103173bc6d24db7cc44c537650f82245faecf: + names: + - ssc-256 +57b4ab43950ab77140395ae5da935884a3867aba367c2bb1883b21f7a0535c1f: + names: + - ssc-288 +ecbfc4a17aca1ee85270a7dd42864fa276379c0ad674af43972daa375612a54f: + names: + - ssc-320 +c883eed0117707b64bb9c5d2dbe4391d79fbd816e051062b1061aa56daa77a1b: + names: + - ssc-384 +e303c034984ad50ea13e98b82ab75f319a01e36b8302db9ff813579ad553da8f: + names: + - ssc-512 +8a627fcd61172caae3c68009e54ece764bd3f0361a32ec4844431e66b66b48cb: + names: + - Tweedledum +97b3ec0b049865ee9d32d6e768b7e7d40659f137a1c5f3313b7c3296fa8d3355: + names: + - Tweedledee +0e46d2ad2fc94b2c18e659ab7fe4913b9398bd7f45e59f11ff5189362d3f3ead: + names: + - JubJub +4c5d8d273f67af1994fe51a44f362b2baf706be2fffaf3dfbe8c8e2f7d65bcbf: + names: + - Pallas +cd73435dee1a73f60aeab90c77b028218118a0d0f32959ba763a07d1a70fcd0e: + names: + - Vesta +1243387d672156496457d8a6280ff957113c21969c0f100eca1212a2e4d938ed: + names: + - MDC201601 +1a3bab4c99b1dcde57c993be18335250230cfce780902c03ff9b1210d0b6ac38: + names: + - BADA55-R-256 +2fc8ed8862e668e596a1685884f451d02e5d1f66351c7f83e17f4724434170d3: + names: + - BADA55-VR-224 +071e5839db1fa40489416b54c97b6908636d20de2840e92fced7d17743ddb195: + names: + - BADA55-VR-256 +2a875b2fa932a9197dbbe950f7e6fbe9855218d146e1f6c8ae97239964245c9e: + names: + - BADA55-VR-384 +703bb05443f43c2692f0d7c8934dbdce23c09fcbe76049316e9bf81214ebdd8f: + names: + - BADA55-VPR-224 +2345fd694393854a35f42b09e7eebb8d969ef898860372162f933a45026ef832: + names: + - BADA55-VPR2-224 +022567b7dedd7a40bf6c3e134e8b5d768cc43b3e0b670fcbee0c949388c8577d: + names: + - FourQ +37605fdde1e292ae0e9bfdf5d0338af088f0f312aae24d6d4f884873319febf3: + names: + - Tom-256 +9450f51b2b390b32f4552a5cde0ba63b8723b4fa98f5e9686eff02a7f2c5898c: + names: + - Tom-384 +d2e82d6e3c27b8994e4c03ad0749ef128b351c3c0ecf149e8b6bfb9be0a6b18e: + names: + - Tom-521 +6a68f34abda418a9a227e2b422727f3c6fbc74a13bb8fa73bf5bdb0e5b771d70: + names: + - secp112r1 + - wap-wsg-idm-ecid-wtls6 +fecc0adf5d5e3cc6f3ae0b14a104e85c20bbe61a127e2c473a7ee8738171cf55: + names: + - secp112r2 +a21b3870c5b1d5bcbd04de93c1a7462782aa2034b3f36cb98caae61393fea600: + names: + - secp128r1 +dfa2ff5b8f7f1e20844920274eb0b0608a3110851f9fe984556e808d135bd7c8: + names: + - secp128r2 +fbad29c03b4a14cf2e7198fb5c31c35859e5b015d84cdccb37d8044dd338517d: + names: + - secp160k1 + - ansip160k1 +003e7831ee60845b40dfda78fe2900bd6cc4419e810998add09ca98264d5d6b7: + names: + - secp160r1 + - wap-wsg-idm-ecid-wtls7 + - ansip160r1 +469a0e7198626e9ceebfcfd68b586ac1df795c2a1ccefbf60fb0027ed2dbb49e: + names: + - secp160r2 + - ansip160r2 +'08e978e7e211573d1399ebf16f31cde8c088e7da896686c5b2b04ad0bfb8355e': + names: + - secp192k1 + - ansip192k1 +0f4a066b38134af2e24008c7635a2cd12c603efe10e3b76b3eb153cfa884a5cd: + names: + - secp224k1 + - ansip224k1 +df90185a5324bff196e97f3bc6dc2ed8e0796d527d7e982bbf93c0f4065be9aa: + names: + - secp256k1 + - ansip256k1 +00f9f3dc94f2a4d8916e029aab69205de00e0ee1be768b5bc630375b98f2842d: + names: + - sect113r1 + - wap-wsg-idm-ecid-wtls4 +ba259c79ac6c612375891d7dc3e5cb56e76a9a1b0c23743dcd1941aa574b20e7: + names: + - sect113r2 +0d9de4e92523315e3ac1678f0c248298cd4d285fbe4920c0ad2b145b400ef87e: + names: + - sect131r1 +793dab69fc8b68f30e6226f063e2f219c6c855195011bf39a20011e217c59558: + names: + - sect131r2 +592b7b784cbe0f62285f645dda6174a098955c791403f82ad835589e10336f94: + names: + - sect163r1 + - ansit163r1 +7bb87bc2c67ba9c3b28c486f3e55323ecc61c3601515c69607f9b507251d8f21: + names: + - sect193r1 + - ansit193r1 +013ea2d717f16fd5f218abe23ca5ebb42d79cc484ade8c19e726bf8c0484b552: + names: + - sect193r2 + - ansit193r2 +53e89df949649eebbd8a61bcb2155a7dd5400c4c956b7ee93d603122be164f07: + names: + - sect239k1 + - ansit239k1 +af0b27425f78cbc60df9948ea4c4036f09debb60ecd59caa70a2058e40d199b1: + names: + - wap-wsg-idm-ecid-wtls1 +1516c5a3fa3d9852d38193d52d6fa7b5725726a107240e977a091f4060dc8869: + names: + - wap-wsg-idm-ecid-wtls5 + - c2pnb163v1 +da7fa5870f6acc50a02c6361c88faec1ba79d824babf5b84ac86eba8a832793b: + names: + - wap-wsg-idm-ecid-wtls8 +6fb1e525b89d4005111b56d8093677457293712ce8ac4ca4cded6fdaa94f30ae: + names: + - wap-wsg-idm-ecid-wtls9 +af18cc7b378314a6010486b84290614b999e1274ef7a20b20997298b712a1ea1: + names: + - prime192v2 +2abad5549f6f25928c7a2e30f25b346227106ae123c739ef28d532ca69dba9bb: + names: + - prime192v3 +84cd41322754f58d435aeff1d98118599fabadb1f1604c9cf90bba2499a9bb3e: + names: + - prime239v1 +b0414b32a7f59470e2c57199b0256335e52ee0b6967cfc365e081fe53ecc0c18: + names: + - prime239v2 +77c9b1afa8825c31a37b1b7afccbab86baf6b2bd420beecc64a0463b17501381: + names: + - prime239v3 +d46c14cd7eeeaebade68d3e264ff790c9b77ec9c90a74e16cec18f90a4b81580: + names: + - c2pnb176w1 +067b5f27470aabb4810fcf1510b99f3c3c64289005acf3639a45e098bb52e444: + names: + - c2pnb163v2 +b2e362703bf8faffaab706ec749c18c6a0f7704159ca0d1d36f10f7618e1c86a: + names: + - c2pnb163v3 +a56380a2219c6e016c67c854a50c2ea8dc875b36bbf35dba7e301103a994d348: + names: + - c2pnb208w1 +22bb2ae73741f129b9d18fd4eb9b01e18b4e6d38b7730c26e0d1e269777d8d2a: + names: + - c2tnb191v3 +60893b56a00bde9e66d7f04425f7e99d2554b915ba45cd32b72b05450aa915eb: + names: + - c2tnb191v2 +8ccdf5ae0e231c685a47479a60c4e1a39f1aa9724455c6cd0c0a5f6745b197ea: + names: + - c2tnb191v1 +bbc0b258d86534251368866fcee4390493f05212d8aca26710639d017bbc39d3: + names: + - c2tnb239v3 +42680087f0850667d200b501156899253dc17e91b739745256f22e2c5dd2d755: + names: + - c2tnb239v2 +133105ff615d164fa7b9f3c3d718462f3861b11718cc221045eb9091413d4a6b: + names: + - c2tnb239v1 +34f8ce27527163ebef5b18b56b53b5f0e2bf3f1834ca1b7579a883893da87fea: + names: + - c2pnb272w1 +9c924fb815e3adaeeece90c21e73bbcee0c56bcf0106ba56b86ce880a6ed9a4b: + names: + - c2pnb304w1 +fdc29d01182f54cdbe566d2f5b39138de01da6daa4d7d330276777575e23d764: + names: + - c2pnb368w1 +fa9800f1595c14f05abc6f05bb78ccec7cd38e93c2542c1fde9bc0f78184c287: + names: + - c2tnb359v1 +3984719325df906182a390bea7e51d42c71ea140c5c75cb07028fb74797f9520: + names: + - c2tnb431r1 +60fd1b1c5667dc302994c4514c4e61428b10cb1ce25a54c65aa1147650eac63d: + names: + - c2onb191v4 +b661b67c436ced5a00ff0847f603f29319491448d185abcf4093053de1a58725: + names: + - c2onb191v5 +4b55a89d713ab4f0417272083edbd4ea862486a49356786e439ad733f1440d0b: + names: + - c2onb239v4 +1f24cfff8a89eead0b85d328f9f14a63acaecbf358d207516292993d91033fd7: + names: + - c2onb239v5 diff --git a/_data/pki.yaml b/_data/pki.yaml index 0654ab93..7dbf46c5 100644 --- a/_data/pki.yaml +++ b/_data/pki.yaml @@ -108,7 +108,8 @@ oids: found_in: - ucrt - dcrt-oid - symbol: oidAppleImg4ManifestCertSpec + symbols: + - CTOidItemAppleImg4Manifest issuers: - Basic Attestation User Sub CA2 - FDRDC-UCRT-SUBCA diff --git a/tasks/curves.rake b/tasks/curves.rake new file mode 100644 index 00000000..29adcb24 --- /dev/null +++ b/tasks/curves.rake @@ -0,0 +1,55 @@ +require 'openssl' +require 'merkle-hash-tree' +require 'deepsort' +require 'digest' + +desc 'Build "One-True-Curve" Files' +task :curves do + def deep_to_a(obj) + case obj + when Hash + obj.map { |k, v| [k, deep_to_a(v)] } + when Array + obj.map { |e| deep_to_a(e) } + else + obj + end + end + + OUTPUT_FILE = File.join(__dir__, '../_data/curves/hashes.yml') + output_data = {} + + Dir.glob(File.join(__dir__, '../ext/std-curves/**/*.json')).each do |file| + next if File.basename(file) == 'schema.json' + puts file + curve_file = JSON.load_file file + + curve_group_name = curve_file['name'].gsub(/\//, '_') + curve_dir = File.join(__dir__, '../_data/curves/', curve_group_name, 'asn') + mkdir_p curve_dir + + curve_file['curves'].each do |curve| + curve = curve.deep_symbolize_keys + curve_name = curve[:name].gsub(/\//, '_') + puts "Exporting #{file}:#{curve_name}" + + result_hash = curve.slice(:field, :params, :generator, :form, :order, :cofactor) + result_hash.deep_transform_values! do |value| + if value.is_a?(String) and value.start_with? '0x' + Integer(value) + end + end + + output_thing = deep_to_a(result_hash.deep_sort) + + mht = MerkleHashTree.new(output_thing, Digest::SHA256) + + curve_hash = mht.head.unpack1('H*') + output_data[curve_hash] ||= {} + output_data[curve_hash]['names'] ||= [] + output_data[curve_hash]['names'] << curve_name + end + end + + File.write(OUTPUT_FILE, output_data.to_yaml) +end From 21f12a4863cd46c66aeccc5230f477b68c0016ec Mon Sep 17 00:00:00 2001 From: Rick Mark Date: Tue, 11 Aug 2026 20:17:52 -0700 Subject: [PATCH 7/7] Better sorting --- _data/curves/hashes.yml | 4595 +++++++++++++++++++++++++++++++++++---- tasks/curves.rake | 27 +- 2 files changed, 4179 insertions(+), 443 deletions(-) diff --git a/_data/curves/hashes.yml b/_data/curves/hashes.yml index 6b322643..b059e325 100644 --- a/_data/curves/hashes.yml +++ b/_data/curves/hashes.yml @@ -1,637 +1,4354 @@ --- -4c51706cce6da427f736494dec9197fa9328baa3ca31ee9e402f92e02c524bf4: +- polyname: 192-bit Random ECP Group_P-192_prime192v1_secp192r1 names: - - FRP256v1 -d174cff233fc1adf98270cf2e05df04b831ad02c656a40a20f0b5c5e414631ec: - names: - - BLS12-377 -3be03afa32710ff41c828393cb508980b29d3ee8cd4616320b376c0d81817921: - names: - - BLS12-381 -d29e1eff3c65cfad50537e5b9fce901b0700f20c6137279525f9280ce38dbd3c: - names: - - BLS12-446 -e273957a92927e6a38967ce3c7e111444519a1b120fa38b5daee05708be5a586: - names: - - BLS12-455 -542dc74b08d7d495fdda7e5f422171a8345d613a2ff1429d0d67bce663f1eac4: - names: - - BLS12-638 -701d1c0019040abcd5b4f2bd89bf979145e3c578362c2f4fb076a0722845089f: - names: - - BLS24-477 -4abc26ddefd2934f61cc681a34fc1bab7c0b106af438db6dbf83a10a1e844d46: - names: - - Bandersnatch -a776ecf15ac8e22cc224771619cff661cebb0aead34629878a3b23760ca61cb6: - names: - - BLS48-581-G1 -fdb82592198b4a8cee8a9ec330406eff993172b99f6e12ff437eb38772e93221: - names: - - BLS48-581-G2 -93d80f47edb8b32c733180de9cafc32f482439812c76598382b8c34e14d12b2d: - names: - - bn158 -8257e3543414ba272493aaafea5f38d85d3f1c1ee48b091c48da92765e6e4b63: - names: - - bn190 -cac16310e3833c81bc3ac0553d7eea2a5fe2d213bab2a91fe522be4adc3f30a4: - names: - - bn222 -337e386c5d90c1e958a85c4350093463fc1071a7d2276bfb3821d59aa8738010: - names: - - bn254 - - Fp254BNb -f3eac0da985f25dbed03b2a1bffee59f4acdfcb9656238f8998e5aebac6d8731: - names: - - bn286 -60bbfc7d39ccf9c49ae6caff89bc3afe2a18ae1a2c398d7d396b4ed92b275c85: - names: - - bn318 -61188779155fdc1be08b26ea72234be852c0cfaa795b86562a0c0b6e58ab1aab: + - P-192 + - 192-bit Random ECP Group + - secp192r1 + - prime192v1 + groups: + - NIST + - Oakley + - SECG + - ANSI x9.62 + hash: 8396ba63a2cceb1d44b0150e87bdba49a51db0c77b3a724fa1b9b6ca2ae9f6a3 + field: + type: + p: 6277101735386680763835789423207666416083908700390324961279 + bits: + params: + a: 6277101735386680763835789423207666416083908700390324961276 + b: 2455155546008943817740293915197451784769108058161191238065 + generator: + x: 602046282375688656758213480587526111916698976636884684818 + "y": 174050332293622031404857552280219410364023488927386650641 + form: + order: 6277101735386680763835789423176059013767194773182842284081 + cofactor: 1 +- polyname: 224-bit Random ECP Group_P-224_ansip224r1_secp224r1_wap-wsg-idm-ecid-wtls12 names: - - bn350 -db15cc1ea53420b60f2a90c45c5148bb9088f37acfae56cee793a0ac8e5a91d9: + - P-224 + - 224-bit Random ECP Group + - secp224r1 + - wap-wsg-idm-ecid-wtls12 + - ansip224r1 + groups: + - NIST + - Oakley + - SECG + - WTLS + - ANSI X9.63 + hash: d9eb05cc330d2c329b6ef4769a78faf5ccb53069db26a5a32ac5f06e535251cd + field: + type: + p: 26959946667150639794667015087019630673557916260026308143510066298881 + bits: + params: + a: 26959946667150639794667015087019630673557916260026308143510066298878 + b: 18958286285566608000408668544493926415504680968679321075787234672564 + generator: + x: 19277929113566293071110308034699488026831934219452440156649784352033 + "y": 19926808758034470970197974370888749184205991990603949537637343198772 + form: + order: 26959946667150639794667015087019625940457807714424391721682722368061 + cofactor: 1 +- polyname: 256-bit Random ECP Group_P-256_prime256v1_secp256r1 names: - - bn382 -acbd252a68627ad707a267d21abf5f225ad3db390cd3b447caca13b3188a8747: + - P-256 + - 256-bit Random ECP Group + - secp256r1 + - prime256v1 + groups: + - NIST + - Oakley + - SECG + - ANSI x9.62 + hash: 0e0f9a09f47c7e18bd6dc8ce2e819969b345bc0c53b1f19f131a075f69bbdfe6 + field: + type: + p: 115792089210356248762697446949407573530086143415290314195533631308867097853951 + bits: + params: + a: 115792089210356248762697446949407573530086143415290314195533631308867097853948 + b: 41058363725152142129326129780047268409114441015993725554835256314039467401291 + generator: + x: 48439561293906451759052585252797914202762949526041747995844080717082404635286 + "y": 36134250956749795798585127919587881956611106672985015071877198253568414405109 + form: + order: 115792089210356248762697446949407573529996955224135760342422259061068512044369 + cofactor: 1 +- polyname: 384-bit Random ECP Group_P-384_ansip384r1_secp384r1 names: - - bn414 -015b429d3030e8d4a898db83f4bdc2a5741b7fd3e02fa714dc77084854056067: + - P-384 + - 384-bit Random ECP Group + - secp384r1 + - ansip384r1 + groups: + - NIST + - Oakley + - SECG + - ANSI X9.63 + hash: fe9308ea3ec036b66e5268ad99790df26a7dac9c89ecd55b29222cbfafd3b5cb + field: + type: + p: 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319 + bits: + params: + a: 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112316 + b: 27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575 + generator: + x: 26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087 + "y": 8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871 + form: + order: 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643 + cofactor: 1 +- polyname: 521-bit Random ECP Group_P-521_ansip521r1_secp521r1 names: - - bn446 -282b1fda2d8e70f6895cd02b9b8c2f6a8dbbdad96896b17d4c5a164a03936d90: + - P-521 + - 521-bit Random ECP Group + - secp521r1 + - ansip521r1 + groups: + - NIST + - Oakley + - SECG + - ANSI X9.63 + hash: 88b1fe6fa85d6eb37f408e52f77f0fb6e805bde1768dc32ca9ecc3846cba3946 + field: + type: + p: 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 + bits: + params: + a: 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057148 + b: 1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984 + generator: + x: 2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846 + "y": 3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784 + form: + order: 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449 + cofactor: 1 +- polyname: B-163_ansit163r2_sect163r2 names: - - bn478 -c357f91bafbfdde8b1edc3ba989c0fe58ddfbb5caecf3c58d4c871f0d0c8ca96: + - B-163 + - sect163r2 + - ansit163r2 + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 5862d506b749e47aec793429b18bb7cfd98b96fd35debbf0f99a29c178431f53 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 2982236234343851336267446656627785008148015875581 + generator: + x: 5759917430716753942228907521556834309477856722486 + "y": 1216722771297916786238928618659324865903148082417 + form: + order: 5846006549323611672814742442876390689256843201587 + cofactor: 2 +- polyname: B-233_ansit233r1_sect233r1_wap-wsg-idm-ecid-wtls11 names: - - bn510 -b73278c40957ffdfa27376c832124e85e047af7673836a3c8f85a2cf2721e053: + - B-233 + - sect233r1 + - wap-wsg-idm-ecid-wtls11 + - ansit233r1 + groups: + - NIST + - SECG + - WTLS + - ANSI X9.63 + hash: f5c499e481a63fc92a2cb5d7710980587c41a020a87fa599a9f94f6f284b1d8f + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 2760497980029204187078845502377898520307707256259003964398570147123373 + generator: + x: 6761246501583409083997096882159824046681246465812468867444643442021771 + "y": 6912913004411390932094889411904587007871508723951293564567204383952978 + form: + order: 6901746346790563787434755862277025555839812737345013555379383634485463 + cofactor: 2 +- polyname: B-283_ansit283r1_sect283r1 names: - - bn542 -61f6f1c01de9144f0ccee42ae68b29e10ef5d3ff5e7f420d5b55ab159f31aaaa: + - B-283 + - sect283r1 + - ansit283r1 + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 341bd1528d398397f26a69a2060490453842f3ad7513d4cc6b9d5ad712635b83 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 4821813576056072374006997780399081180312270030300601270120450341205914644378616963829 + generator: + x: 11604587487407003699882500449177537465719784002620028212980871291231978603047872962643 + "y": 6612720053854191978412609357563545875491153188501906352980899759345275170452624446196 + form: + order: 7770675568902916283677847627294075626569625924376904889109196526770044277787378692871 + cofactor: 2 +- polyname: B-409_ansit409r1_sect409r1 names: - - bn574 -5160d97c15ed47d0ab83a390d4a98c9f6ad7e2451047528a56987ce49e8d4d99: + - B-409 + - sect409r1 + - ansit409r1 + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 1604b6a5d59d00eab678a01d1b66e7d9a4d40c302798bf94ae6393470d694e79 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 86886261634090707672817770640384425264505829479043641824438658614111870471004564988634410809058207142318571212147935892575 + generator: + x: 901935279919555460519938020229627704409149556251441963587868715440518797594851300277260702073828731983206453567757135484583 + "y": 252271804478663965520986398892908223486048997352743726687083769858460083134230324190507814191768191984593727083669152319238 + form: + order: 661055968790248598951915308032771039828404682964281219284648798304157774827374805208143723762179110965979867288366567526771 + cofactor: 2 +- polyname: B-571_ansit571r1_sect571r1 names: - - bn606 -ef1b2993125107b4600112392907e5f127dbec80f7946062a5df9ff005745a67: + - B-571 + - sect571r1 + - ansit571r1 + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 6afaa20ff5ea2ba4f25049ec7ed527a78621154a0e4610367877213b8fabd1a4 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 2853329245261343535560086964181551296889298776106832980891560850944180011701123307905326019642652653533003482753023669016842884108172514870944140611113679225347419720217210 + generator: + x: 2909726711393360238997027325079981094903293083416277207163191533186952179846948691035435651273252692731060457249729605513129233502615507099213961913121214831097565254790425 + "y": 3366174731810125753087813209708676894833150358595778752145226712858102783612277607950241452090192525005883890170639174605150394168627448707126811848455102037101825665712475 + form: + order: 3864537523017258344695351890931987344298927329706434998657235251451519142289560424536143999389415773083133881121926944486246872462816813070234528288303332411393191105285703 + cofactor: 2 +- polyname: BADA55-R-256 names: - - bn638 -f2f603b1176a9fe83fab2bcc92a3b8d76aab681ebc880659f885445bea13415a: + - BADA55-R-256 + groups: + - other + hash: e0ff379f8f4f6370b33cf6e8b62ab73595ae8aee43d138ec86eb75bbd4f5400a + field: + type: + p: 109454571331697278617670725030735128145969349647868738157201323556196022393859 + bits: + params: + a: 109454571331697278617670725030735128145969349647868738157201323556196022393856 + b: 84515954182592140125803430112897375925683526035264897598044571562912970554696 + form: + order: 109454571331697278617670725030735128145588092482846170632876105195456963397991 + cofactor: 1 +- polyname: BADA55-VPR-224 names: - - brainpoolP160r1 -bbd0c469e21e40e9687d2b400077eee2a7cc6fd4eb5677fe8e0a42f2606b8238: + - BADA55-VPR-224 + groups: + - other + hash: 990b093869a4111f8c7260088ae759fd8a606bbdc955dd8de4c7b36395bcb969 + field: + type: + p: 26959946667150639794667015087019630673557916260026308143510066298881 + bits: + params: + a: 5932350833048836675063838953473728018980710067449037706580296393835623260384552519146420261902795561828358448423044746435212852702484958606554674746182985 + b: 4828849322892077524400878405643475202086930645262587584016337644194866730797082434077587637295352701527938488137012123175359515180405941704245081199428770 + form: + order: 26959946667150639794667015087019626926434063199188035923908887661277 + cofactor: 1 +- polyname: BADA55-VPR2-224 names: - - brainpoolP160t1 -2ee20726dbd836c83ba89bb87c7e2f9d7e8a8539c211bb58d6948eac3e9d08f9: + - BADA55-VPR2-224 + groups: + - other + hash: c8266f84bf9298b7d498ffb2a0194ed7ef4f6bcbbcea3772acca0282581eaaed + field: + type: + p: 26959946667150639794667015087019630673557916260026308143510066298881 + bits: + params: + a: 7492779957200677572949915929703956416586646386653355944827970894398886163194915008298895509902966892279001066078761192613529774520855233160125850872520431 + b: 760454733276948837728106077605249407017816549500482231341713984300322298517631275412641449831641832405870723965463902247316357567576529194469485346017372 + form: + order: 26959946667150639794667015087019630011607578293774157398356967301647 + cofactor: 1 +- polyname: BADA55-VR-224 names: - - brainpoolP192r1 -26d4450026dcf82695bbe82d9d597caecf6e333d13f5eaac222ee8ed65104def: + - BADA55-VR-224 + groups: + - other + hash: 25077a51f4e51a3b7b9d7be1a40f4de106eedeb6efcf889b4351103fe0c106a3 + field: + type: + p: 26959946667150639794667015087019630673557916260026308143510066298881 + bits: + params: + a: 26959946667150639794667015087019630673557916260026308143510066298878 + b: 84515955534304576758654978360789632555113087818511480086621335083142765194062 + form: + order: 26959946667150639794667015087019625750473112757966691837284557762681 + cofactor: 1 +- polyname: BADA55-VR-256 names: - - brainpoolP192t1 -1eb1e3a9f3a543cbb910b6f9046227d9e66a62f3d63cd956ade57ab2d9595715: + - BADA55-VR-256 + groups: + - other + hash: 66272d15886adb2933579aac0d909026f6d0d026b6c3d819d53113b5a6aa6226 + field: + type: + p: 115792089210356248762697446949407573530086143415290314195533631308867097853951 + bits: + params: + a: 115792089210356248762697446949407573530086143415290314195533631308867097853948 + b: 84515955530420886357456836194582583640310551107276416776644022027044700097292 + form: + order: 115792089210356248762697446949407573529659275108854709778199731916161746197393 + cofactor: 1 +- polyname: BADA55-VR-384 names: - - brainpoolP224r1 -48f0ae93cddae909fc7ae3de277bcf0aee808260d8c9798b889bceb71886a582: + - BADA55-VR-384 + groups: + - other + hash: 1eb1f0dec63cb47f428e5f526d21730b59143c7d47e792338021c1f2e4874b6b + field: + type: + p: 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319 + bits: + params: + a: 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112316 + b: 28759289384855585255140060016785796885772635169765278563241947317788270195587490960283298618618759441156173673677117 + form: + order: 39402006196394479212279040100143613805079739270465446667941621022900220837253578036853148808081762239228265036238391 + cofactor: 1 +- polyname: BLS12-377 names: - - brainpoolP224t1 -53a908a302f4df79de61e21e39fcb746109ad54d223f50b4024fba80e74519f4: + - BLS12-377 + groups: + - Barreto-Lynn-Scott + hash: 9c43b04004dab5935f167ea3feb0dc2110c981b129a9f17e14252a4421d37b9c + field: + type: + p: 258664426012969094010652733694893533536393512754914660539884262666720468348340822774968888139573360124440321458177 + bits: + params: + a: 0 + b: 1 + generator: + x: 81937999373150964239938255573465948239988671502647976594219695644855304257327692006745978603320413799295628339695 + "y": 241266749859715473739788878240585681733927191168601896383759122102112907357779751001206799952863815012735208165030 + form: + order: 8444461749428370424248824938781546531375899335154063827935233455917409239041 + cofactor: 30631250834960419227450344600217059328 +- polyname: BLS12-381 names: - - brainpoolP256r1 -322cad5321c7a801b053db82072db0afcd03cffd05d5ae2dfaa17f27a8aaa127: + - BLS12-381 + groups: + - Barreto-Lynn-Scott + hash: d168ce49e06ac7fa6a09d57c3b58ef55b05b8341665d99ea171dacc5ec79c4f0 + field: + type: + p: 4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787 + bits: + params: + a: 0 + b: 4 + generator: + x: 3685416753713387016781088315183077757961620795782546409894578378688607592378376318836054947676345821548104185464507 + "y": 1339506544944476473020471379941921221584933875938349620426543736416511423956333506472724655353366534992391756441569 + form: + order: 52435875175126190479447740508185965837690552500527637822603658699938581184513 + cofactor: 76329603384216526031706109802092473003 +- polyname: BLS12-446 names: - - brainpoolP256t1 -2ca0cac563ff347f2f8f728c864bf34fe5517f49ef803f276475c64a0c0649f0: + - BLS12-446 + groups: + - Barreto-Lynn-Scott + hash: bd301d7391449a4cf0c214458d4b350e6cdd20f4e22f0797ecf75b91f771c95f + field: + type: + p: 172824703542857155980071276579495962243492693522789898437834836356385656662277472896902502740297183690175962001546428467344062165330603 + bits: + params: + a: 0 + b: 1 + generator: + x: 117733910625767352562622295076808951238721926790078686146009933486323198719764716614394096595844223744159169311560187133811411396395866 + "y": 2442759535059259443365156902196516512631764309927898508000531773063769688990884680602208026890498469344655513708770663295059956492492 + form: + order: 645383785691237230677916041525710377746967055506026847120930304831624105190538527824412673 + cofactor: 267785939737784928360481681640896166738700972 +- polyname: BLS12-455 names: - - brainpoolP320r1 -cf42dccf1eca457fd251dbba51a6e6521e1c0a3ca8242da7e0be6e1cfcc54cb0: + - BLS12-455 + groups: + - Barreto-Lynn-Scott + hash: 120d49c459b799fcf836ae5ceb575e13f197698729fa046a7043420309927e31 + field: + type: + p: 62023615502630691959947542088993379461260029989578145286594463370037455903184790399094337933920614809072869582259708675651604292655121067 + bits: + params: + a: 0 + b: 10 + generator: + x: 2184929776028972552506682425393509767444079576849859202215070020514232690381514671768244064263996291180563445266569895924910332346086138 + "y": 18649838869337067690708439449593748902230900026224757347283892323816777090230243799862931794251220821660394867597829772295454358202627452 + form: + order: 32592591162709399548204674974693769236593666020311973148317336684828427238867413559777689601 + cofactor: 1902997377317904285509030108837873050145782443 +- polyname: BLS12-638 names: - - brainpoolP320t1 -4fbb84e21ec4f7912d3ef99e8544b45df1715b143d141bba3ecd28510a7f5817: + - BLS12-638 + groups: + - Barreto-Lynn-Scott + hash: 7b05e68174e4ace06faa51dc43d76f99c7314a0a77347a171ebe37223c792ac2 + field: + type: + p: 1082159996029801447407061915918058655017421337462511263853382495313523741057008334847967336392717312405560092419564537672318099867365585979660877534008398116971703340756992868556828633685753867 + bits: + params: + a: 0 + b: 4 + generator: + x: 393156096514656013816739747237352033301047675135437701517165643631719350682293112500238544728623191558815870892645613219271235704241950970749583458776009684671800415825129114435569495622779983 + "y": 805614661511438235550412737322454824796711263750382642052610729342735772602079091927749084694676207289585696971464252964345264552406830871293885393917735533705498118872354969858720945317709678 + form: + order: 219251119771344696405774021764183233417591210126646941054157095923964932206472226527334834765904652086236540876580366888700214273 + cofactor: 4935710235634726836466098878268102698735442767320585457707428843 +- polyname: BLS24-477 names: - - brainpoolP384r1 -262e6a47f555ea0320c0bee6e3b7316d104bb971a02fa14714e3e5c05a14dc55: + - BLS24-477 + groups: + - Barreto-Lynn-Scott + hash: 6a9a9527294f571458798a7ab4d4c830b52c56937062410f7a7dfe48dd40b0cd + field: + type: + p: 273728064501339756603462468369185104987958288074891940133644204431064409085893803646700523799946827238917453720697332026264620142876572570883371 + bits: + params: + a: 0 + b: 4 + generator: + x: 266743698038757295662619710019685297812999597016601680088845584202609930049499733308401955357016250385137548714986909418875978427995232610959533 + "y": 126907919156628327371089377056478148517962766820952486769993944304800449377409455373976248358717859439807799479876167428880095710068065380060718 + form: + order: 13537936261228327234360016478152006762700163086861427334212852888813629813026812384883257261708307801344061818798081 + cofactor: 20219334706522233036632757675 +- polyname: BLS48-581-G1 names: - - brainpoolP384t1 -a3eaafb5587210844ddf92b135b2a5746cd27ed8feb622122f1b783bf7b2f4b5: + - BLS48-581-G1 + groups: + - Barreto-Lynn-Scott + hash: 65ba62751ac71983b5d0b4583708af99b871e2bfd76017dd55a7dc734ad22196 + field: + type: + p: 4576545538729420598762745822889397370509838601207708465545582186285824315458656151272834027217178198654229063318759931344008864619718319130560845441720114764111976549023322411 + bits: + params: + a: 0 + b: 1 + generator: + x: 664072909943994472690889998901829287982029758036230819413867343678033644096959380195596447812034430863032620612185983287376705940471023336491067760994453918708210129809634880 + "y": 3199694675129793773108956982140527773957085482385893132424130688183391029819654499891441792905637192115676461347904751827252586497434610320289928188243138349978296597479979632 + form: + order: 476342299743339008482451055637099285448102090246347886165811576342746904451443552831892849773706409097740116059681046950759420830087773258940488535108951041 + cofactor: 9607682419124520108 +- polyname: BLS48-581-G2 names: - - brainpoolP512r1 -ef91c00f3e5c5d98f9aa076a81141a6892dd85b42896b591dd6e94810cfa0255: + - BLS48-581-G2 + groups: + - Barreto-Lynn-Scott + hash: 0bd553ea9a9135ee834795346dee5abae049805adb86fb34e411c6720cf199c7 + field: + type: + degree: + poly: + - power: + coeff: + - power: + coeff: + - power: + coeff: 1 + - power: + coeff: + - power: + coeff: + - power: + coeff: 1 + base: + type: + degree: + poly: + - power: + coeff: + - power: + coeff: 1 + - power: + coeff: + - power: + coeff: 1 + - power: + coeff: 1 + base: + type: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + base: + type: + p: 4576545538729420598762745822889397370509838601207708465545582186285824315458656151272834027217178198654229063318759931344008864619718319130560845441720114764111976549023322411 + bits: + params: + a: 0 + b: + poly: + - power: + coeff: + - power: + coeff: + - power: + coeff: 2288272769364710299381372911444698685254919300603854232772791093142912157729328075636417013608589099327114531659379965672004432309859159565280422720860057382055988274511661206 + - power: + coeff: 2288272769364710299381372911444698685254919300603854232772791093142912157729328075636417013608589099327114531659379965672004432309859159565280422720860057382055988274511661205 + generator: + x: + poly: + - power: + coeff: + - power: + coeff: + - power: + coeff: 2017129169333395345633141475822059490092411671567902705493511969511392022432425759593596386161149120784963050000240276833824538618538192218929360983482809317427148869408828980 + - power: + coeff: 2870843100183194458942309803448581771978562926373880620853311485123121473744994667052852483156268555743209387281247891718688659592351594274548885037402404062588363878599549015 + - power: + coeff: + - power: + coeff: 3113637784395408559484960060574684307293088886140404453445698198645686584906103550058513545308119878620652606525755850941709226035940367023080655492133054442482093762610465082 + - power: + coeff: 876834026860168950714140977613653307343668884965682715114142083411987609146559708824271840302954279917986613984360806192457612766781117723740232828322881939011728960053103845 + - power: + coeff: + - power: + coeff: + - power: + coeff: 2939107393077529547409028576571646748977347610143044920226464963606088123163140902014960657059257997044608374207548665605376498041290254046255723942808292843714544466244135678 + - power: + coeff: 491567806338252788220091164105417437861792348007896669639990900214735547073811742598627820597799608204742103543351363962176426886270578385092201760868997780620612001278344810 + - power: + coeff: + - power: + coeff: 1921245943142711861966782556075759527860244268870632226238298372979430346682542571242137437373070709040911566679509671885125867565446336887156643584985124533164957919807306839 + - power: + coeff: 1443487226727976320148700811468278703524141598101868684052641732350959994878689540332447479881718529248946466723185082144000700219499769534219241280848932750644871586103476139 + "y": + poly: + - power: + coeff: + - power: + coeff: + - power: + coeff: 832948018248678042764866718194993049985169510400121909682669080951443617593089142981340481082819616824052866488042489863269729583751788526826053728496812123725076915556915382 + - power: + coeff: 2124010466530791911919697660124033442359779792592481472866645615824686571937744871290177917838663874469646368660995928691870081517737072921748540765881663004327827060347255174 + - power: + coeff: + - power: + coeff: 1933054560504635618471789757006703272655789089800475001404340285750201022736709634006125418130406419023350948712829153945715449982032072223882315271015579081083239573841034980 + - power: + coeff: 3246805360189970419745921850668343751668870550890806398444187512193091164419514353593223787351032963858777483092955696366284423727985498019057529862972730242669476256497860919 + - power: + coeff: + - power: + coeff: + - power: + coeff: 2701453788543839550960570926606051051949430885597355159712628581975392766891484490460973297021614195157577396571861747680033126668476221212836581697845770487465374355694901405 + - power: + coeff: 2773417082146389005489000665057691781041168613557058249287783279323439672286199559954269897524070529314330769159759771181856135881665454360801407761460850356957184519408616564 + - power: + coeff: + - power: + coeff: 623022546489059811426291883243133168913396015170486411116844589596543525122042928566045698104822153956844652513449046771555332945350854931013288518370393729275215958005077605 + - power: + coeff: 227355605918433105761364564368569538536078810855376376735405018095770092842893040752406724486824563200217037394779481035188177439298995350499788592705964800823421290238802289 + form: + order: 476342299743339008482451055637099285448102090246347886165811576342746904451443552831892849773706409097740116059681046950759420830087773258940488535108951041 + cofactor: 404001666079718828424928462701476396078557430903025498320015069780915772977721230131210997518979520130176733031453278068835147732293884795839485728606048991214797722812295493041254311473896763308294197083786434071740359843747101702997060366866809126345547678340108006826466784397020229561686014228422473006915261359014219256423019897151478718181046789624130272803157710698033568242489219885432286960190798708943849354242694549627402288181461159788243359683392159256702996293595100421706295904930439126712318766675571366024100918787291288004513531819404064338264446226234707581548842317805483928629180447571361218243095878362891302702531056313397782703965411466083559025624148466958293580847002444282975752901707621050523914356348285939235316367381370031979440090633186571281623150787538440505919484375349675002055144660401861550341054581984495723616220883278841172752095127640924600208798772606915013199155798323796696747036564640117720656686283218996179186882425564875829708646305570711039871359146422329060781081729378012132629100855962777552727332371806140499290037907076523597478847640819502793139901085385109401917840720543055697508849469456235825092988728832328928701517849897595367939382866287368791943955927018850323491903758638647729 +- polyname: Bandersnatch names: - - brainpoolP512t1 -bd46e77f3328ddc23e433356081e8b87235f330c13343d745e63ad5e87cb6f58: + - Bandersnatch + groups: + - Barreto-Lynn-Scott + hash: ca0ddfe6101e54a1a4d0de564a98cac8c92266f62a6d35cad5f89b7325a314fc + field: + type: + p: 52435875175126190479447740508185965837690552500527637822603658699938581184513 + bits: + params: + a: + raw: + d: 45022363124591815672509500913686876175488063829319466900776701791074614335719 + form: + order: 13108968793781547619861935127046491459309155893440570251786403306729687672801 + cofactor: 4 +- polyname: Curve1174 names: - - gost256 -96856a2ad573020de74e060236fd2557d80b0099667352c5d4ab9a1567226434: + - Curve1174 + groups: + - other + hash: 348956397c0ea644762c68ee64349fb9e43a9cb831aef80e94ad10b013fb66fd + field: + type: + p: 3618502788666131106986593281521497120414687020801267626233049500247285301239 + bits: + params: + a: 2047321249219657235734354626905280581970433255745458932808250373942901373549 + b: 401568684892304675786656630878837678659783106924670419319797553351317549798 + generator: + x: 1693537507433864166315016284024856161961867444665036408510332551376158347345 + "y": 181973560066092985673975041609332972280189445908712331692353691761652347552 + form: + order: 904625697166532776746648320380374280092339035279495474023489261773642975601 + cofactor: 4 +- polyname: Curve22103 names: - - gost512 -222345c039189479160f653b4c18a499b62347d9936303bcb34d6564fc97b066: + - Curve22103 + groups: + - other + hash: 7151f14cb16b1d0ccb7333f0d2d796645635a7c12a09174801271491526107f8 + field: + type: + p: 3369993333393829974333376885877453834204643052817571560137951281149 + bits: + params: + a: 2246662222262553316222251257251635889469762035211714373411374400767 + b: 2121847654359078131987681742959878340054775255477730874138797701479 + generator: + x: 1337986418373986027481331603085719890755810485220461707389578529200 + "y": 357140777035609340439344712909994219660040722634117794161168213942 + form: + order: 421249166674228746791672110734681522412213359496917167944873418789 + cofactor: 8 +- polyname: Curve25519 names: - - id-tc26-gost-3410-12-512-paramSetA -aa2e485f0bc64a06e930a1fe5b5b4a8379d420fd777e3d7503156f4ba3160bd1: + - Curve25519 + groups: + - other + hash: 2cb397233ff78f3ebb2a2381c13c9b0ed7ff0cacb6e93c5081935d8770cea548 + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564819949 + bits: + params: + a: 486662 + b: 1 + generator: + x: 9 + "y": 14781619447589544791020593568409986887264606134616475288964881837755586237401 + form: + order: 7237005577332262213973186563042994240857116359379907606001950938285454250989 + cofactor: 8 +- polyname: Curve383187 names: - - id-tc26-gost-3410-12-512-paramSetB -bb2a0c21c305fdb01f2620b591f17818a05ce6f546a626a9f0da81bd96278590: + - Curve383187 + groups: + - other + hash: ea082b5d0b5daa6a953ce32def12dbd409363db455c350f37b785e6cc92d3ec1 + field: + bits: + p: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995153221 + type: + params: + a: 229969 + b: 1 + generator: + x: 5 + "y": 4759238150142744228328102229734187233490253962521130945928672202662038422584867624507245060283757321006861735839455 + form: + order: 2462625387274654950767440006258975862817483704404090416747124418612574880605944350369924877650606926799392131911201 + cofactor: 8 +- polyname: Curve41417 names: - - id-GostR3410-2001-CryptoPro-A-ParamSet -e868d43638c89a62cea5bbeaa2c52b6c2edf079fcfd8915c240510a9e2d508c7: + - Curve41417 + groups: + - other + hash: 3975322a969579b5dd54d286e7fbd5b343168218cfde78fe6705899b6291eb47 + field: + type: + p: 42307582002575910332922579714097346549017899709713998034217522897561970639123926132812109468141778230245837569601494931472367 + bits: + params: + a: 1 + d: 3617 + generator: + x: 17319886477121189177719202498822615443556957307604340815256226171904769976866975908866528699294134494857887698432266169206165 + "y": 34 + form: + order: 5288447750321988791615322464262168318627237463714249754277190328831105466135348245791335989419337099796002495788978276839289 + cofactor: 8 +- polyname: Curve4417 names: - - id-GostR3410-2001-CryptoPro-B-ParamSet -1fe2431fa5f4a7f4a9ae96a724b1f94fb6124bc3b609b913c351f45ed4f83c8a: + - Curve4417 + groups: + - other + hash: 4c9b1320e8956dd392a50830394b4e5c8b3c615aedd36b6af9615bbdbbbcf7fe + field: + type: + p: 107839786668602559178668060348078522694548577690162289924414440996859 + bits: + params: + a: 7401815419538074743978245899249382084705161297327706860045224408496 + b: 8035742562787894542656578431380914253495041131474896510115662517273 + generator: + x: 26919424294512923768764696235491508472377067628859790885860957243947 + "y": 105419009805682646551400593687804125378724714690915124552655237729942 + form: + order: 26959946667150639794667015087019630598406707739507919450642540907951 + cofactor: 4 +- polyname: Curve448 names: - - id-GostR3410-2001-CryptoPro-C-ParamSet -17f57822d6ae34ff632f459ad1b41a5bc72f705fcbc90d3a645d8fcceb78f332: + - Curve448 + groups: + - other + hash: 2543e83bb51aeb255e1d85b69974439fba19984bdbbd8a8b8eeb2ac646761895 + field: + type: + p: 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439 + bits: + params: + a: 156326 + b: 1 + generator: + x: 5 + "y": 355293926785568175264127502063783334808976399387714271831880898435169088786967410002932673765864550910142774147268105838985595290606362 + form: + order: 181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779 + cofactor: 4 +- polyname: Curve67254 names: - - id-tc26-gost-3410-2012-256-paramSetA -e7ff46b256c080686c6ed04250ee7c67fefb153879dd122cdfea2b344e2b32d2: + - Curve67254 + groups: + - other + hash: 3d6629d030bb87590e8bd309aae93eff05244526d9354087cb57af6d1b7d35ac + field: + type: + p: 9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997576599 + bits: + params: + a: 7110263403336727956917832743443215860186721116830095498913732163684697706876953857073907972113277789027662923341642 + b: 5381542616878395772307449677159299256961129945718345683548128255485830398192764182681972365563411471101227075617197 + generator: + x: 3093477404411145756332132421692292074071171674710074243290549878642414041956821306987982277902602857484529793458368 + "y": 2050032195634781145355456866885219395275950645376347239510583784130496504856606986087126019104421998477492949526421 + form: + order: 2462625387274654950767440006258975862817483704404090416745738034557663054564649171262659326683244604346084081047321 + cofactor: 4 +- polyname: E-222 names: - - id-tc26-gost-3410-2012-512-paramSetC -de61bac7ab935d971fb0fe3357d8fb52bfddc762332d4a9b8ab35a1304c5d20c: + - E-222 + groups: + - other + hash: a3cc5c417933a45afa47a342ba06a219fc2fa7bf4ab86846b01c83cbe1632d4d + field: + type: + p: 6739986666787659948666753771754907668409286105635143120275902562187 + bits: + params: + c: 1 + d: 160102 + generator: + x: 2705691079882681090389589001251962954446177367541711474502428610129 + "y": 28 + form: + order: 1684996666696914987166688442938726735569737456760058294185521417407 + cofactor: 4 +- polyname: E-382 names: - - mnt1 -b07d7330b0d490c280e2af27361c5cf9f4e835d89a8152dc1bf7d1617c208498: + - E-382 + groups: + - other + hash: d9f07a0815d27106007c65569d46f56af884d4b58af4ab7e0f7617ee9ab1e46d + field: + type: + p: 9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997576599 + bits: + params: + c: 1 + d: 9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997509345 + generator: + x: 3914921414754292646847594472454013487047137431784830634731377862923477302047857640522480241298429278603678181725699 + "y": 17 + form: + order: 2462625387274654950767440006258975862817483704404090416745738034557663054564649171262659326683244604346084081047321 + cofactor: 4 +- polyname: E-521 names: - - mnt2_1 -fe0eaee76c1cefdd669c8bdd25df18b9cdc0d2e3f72573dbedecdc99ecf191e9: + - E-521 + groups: + - other + hash: b8c1ad2fde16d7d741a7607bbce744f2e19ac0560496f24ca3e44ed42d0f9dc4 + field: + type: + p: 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 + bits: + params: + c: 1 + d: 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291114681137 + generator: + x: 1571054894184995387535939749894317568645297350402905821437625181152304994381188529632591196067604100772673927915114267193389905003276673749012051148356041324 + "y": 12 + form: + order: 1716199415032652428745475199770348304317358825035826352348615864796385795849413675475876651663657849636693659065234142604319282948702542317993421293670108523 + cofactor: 4 +- polyname: Ed25519 names: - - mnt2_2 -0a638ae9b2b74a05d174d572e6f322642213526c3ce43c652e35a8cd1a504a15: + - Ed25519 + groups: + - other + hash: 8b9ac945d15227643e10d9aa7d4e5439aa7aa35e4b712d7435e4417b389db94f + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564819949 + bits: + params: + a: 57896044618658097711785492504343953926634992332820282019728792003956564819948 + d: 37095705934669439343138083508754565189542113879843219016388785533085940283555 + generator: + x: 15112221349535400772501151409588531511454012693041857206046113283949847762202 + "y": 46316835694926478169428394003475163141307993866256225615783033603165251855960 + form: + order: 7237005577332262213973186563042994240857116359379907606001950938285454250989 + cofactor: 8 +- polyname: Ed448 names: - - mnt3_1 -aad4b5be1211cd78704ae931601e971b09aacf5421ed6c795e7ce6cb6aa71da3: + - Ed448 + groups: + - other + hash: 7fc47343e9f13915faadba1bb69364b57bb3933b31ff5432b7f9cecda2eaddd8 + field: + type: + p: 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439 + bits: + params: + a: 1 + d: 611975850744529176160423220965553317543219696871016626328968936415087860042636474891785599283666020414768678979989378147065462815545017 + generator: + x: 345397493039729516374008604150537410266655260075183290216406970281645695073672344430481787759340633221708391583424041788924124567700732 + "y": 363419362147803445274661903944002267176820680343659030140745099590306164083365386343198191849338272965044442230921818680526749009182721 + form: + order: 181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779 + cofactor: 4 +- polyname: Ed448-Goldilocks names: - - mnt3_2 -2913f5c847c0770383c9487657c2461d4cc77dc6573f72fbc7bf003e55cd903c: + - Ed448-Goldilocks + groups: + - other + hash: 803752d0a7838894422dfdf2e4f2a0bf037d6dcb7db503cff91a5bf647aa4cd4 + field: + type: + p: 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439 + bits: + params: + a: 1 + d: 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018326358 + generator: + x: 484559149530404593699549205258669689569094240458212040187660132787056912146709081364401144455726350866276831544947397859048262938744149 + "y": 494088759867433727674302672526735089350544552303727723746126484473087719117037293890093462157703888342865036477787453078312060500281069 + form: + order: 181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779 + cofactor: 4 +- polyname: FRP256v1 names: - - mnt3_3 -7ed9553f3d21e4bdbe9ab466474837f0bd3b250fa89f010f9b8ac56416e36a93: + - FRP256v1 + groups: + - ANSSI + hash: a5c20916dac209533dfeb46c04ac627bc40c5b7d0611e5f8790edc1025c8eaed + field: + type: + p: 109454571331697278617670725030735128145969349647868738157201323556196022393859 + bits: + params: + a: 109454571331697278617670725030735128145969349647868738157201323556196022393856 + b: 107744541122042688792155207242782455150382764043089114141096634497567301547839 + generator: + x: 82638672503301278923015998535776227331280144783487139112686874194432446389503 + "y": 43992510890276411535679659957604584722077886330284298232193264058442323471611 + form: + order: 109454571331697278617670725030735128146004546811402412653072203207726079563233 + cofactor: 1 +- polyname: FourQ names: - - mnt4 -433d6ce78991632e7643d29627628844acb153c795585e258497793ea1caec2a: + - FourQ + groups: + - other + hash: 022567b7dedd7a40bf6c3e134e8b5d768cc43b3e0b670fcbee0c949388c8577d + field: + type: + base: 170141183460469231731687303715884105727 + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + params: + a: + poly: + - power: + coeff: 0 + d: + poly: + - power: + coeff: 125317048443780598345676279555970305165 + - power: + coeff: 4205857648805777768770 + form: + order: 73846995687063900142583536357581573884798075859800097461294096333596429543 + cofactor: 392 +- polyname: Fp224BN names: - - mnt5_1 -6b4da477f61b460574a662566e03c18d93bd3d59e90c9a1a808f6c6554fe847d: + - Fp224BN + groups: + - other + hash: 28bea03fbf6c77219aa1f742ff71cc9c26ee21f4b32a78e3c6dde8e567296ab8 + field: + type: + p: 26959946667149205758383469736921695435015736735261155141423417423923 + bits: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 26959946667149205758383469736921690242718878200571531029749235996909 + cofactor: 1 +- polyname: Fp254BNa names: - - mnt5_2 -5fee9a730ebd1a176a562efe59b8d41dd4b126568d41b67b9918dc84e7239d9a: + - Fp254BNa + groups: + - other + hash: a565d6cf60dda79df90eda892ea80a3f00feccff5298f5719f3f73db26d0e890 + field: + type: + p: 16030569034403128277756688287498649515636838101184337499778392980116222246913 + bits: + params: + a: 0 + b: 5 + generator: + x: 1 + "y": 6002591013793082186349685741340126608890177833573736884572962620906403581104 + form: + order: 16030569034403128277756688287498649515510226217719936227669524443298095169537 + cofactor: 1 +- polyname: Fp254BNb_bn254 names: - - mnt5_3 -b33c320da3c257ce42467d3b674b0d656a1da6eefabd45888e4d221f749dc96e: + - bn254 + - Fp254BNb + groups: + - Barreto-Naehrig + - other + hash: a3d78f1d5ff7d502c2067064c8670f15342cae61f7b991cc74a16809f669ff31 + field: + type: + p: 16798108731015832284940804142231733909889187121439069848933715426072753864723 + bits: + params: + a: 0 + b: 2 + generator: + x: 16798108731015832284940804142231733909889187121439069848933715426072753864722 + "y": 1 + form: + order: 16798108731015832284940804142231733909759579603404752749028378864165570215949 + cofactor: 1 +- polyname: Fp254n2BNa names: - - P-192 - - 192-bit Random ECP Group - - secp192r1 - - prime192v1 -36789bdd8aabe91d9dc2f32f1543e4108c56f36211fc8db2e70743c69121bb9d: + - Fp254n2BNa + groups: + - other + hash: 43be14f890f5ea448df257acacadb2742e0ec33e4d1726de30bb599336462352 + field: + type: + base: 16030569034403128277756688287498649515636838101184337499778392980116222246913 + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 5 + params: + a: + poly: + - power: + coeff: 0 + b: + poly: + - power: + coeff: 16030569034403128277756688287498649515636838101184337499778392980116222246912 + generator: + x: + poly: + - power: + coeff: 4574294726478991705079958181389121382249029767364513080035216115522393096050 + - power: + coeff: 11620102069743557432508134164631679968248472647222803640333454544048311830965 + "y": + poly: + - power: + coeff: 6744920927783698390056369890426382297011375037280055233736013189774035833669 + - power: + coeff: 10706785408712264766115933936753367080944659484916409003374807737756357043751 + form: + order: 16030569034403128277756688287498649515510226217719936227669524443298095169537 + cofactor: 16030569034403128277756688287498649515763449984648738771887261516934349324289 +- polyname: Fp256BN names: - - P-224 - - 224-bit Random ECP Group - - secp224r1 - - wap-wsg-idm-ecid-wtls12 - - ansip224r1 -96220b970f58e631791053c24fd0b73da918b317984de9593ea0b97fdbf69acd: + - Fp256BN + groups: + - other + hash: e16ac54a932cbe3c3de8cadb142f8f66ff81687908b027f86dea0f8a2a35ff4e + field: + type: + p: 115792089237314936872688561244471742058375878355761205198700409522629664518163 + bits: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 115792089237314936872688561244471742058035595988840268584488757999429535617037 + cofactor: 1 +- polyname: Fp384BN names: - - P-256 - - 256-bit Random ECP Group - - secp256r1 - - prime256v1 -7329a99a6b22cdcb02439378519905186dfdf8d9edcaaeb9d02580ed41263392: + - Fp384BN + groups: + - other + hash: 708c9c6558fd81ef829c279f6c2d27f9c5ee070dad98af2978610bce0cbf3bae + field: + type: + p: 39402006196394479212278605372068645601647601647604977711041989197213181721117185302456933847594895764913993728971019 + bits: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 39402006196394479212278605372068645601647601647604977711035712095477795040353349547661912204165862202002491141937013 + cofactor: 1 +- polyname: Fp512BN names: - - P-384 - - 384-bit Random ECP Group - - secp384r1 - - ansip384r1 -b3574a02ac1b209aa6cfd700d3b454d7fabcc8713dd411f927a3a45aae722d05: + - Fp512BN + groups: + - other + hash: 97403a5f944cd90b5b24c92853131d38017a59449548503af5f9357dbc4414d5 + field: + type: + p: 13407807929942597099574024998205830437246153344875111580494527427714590099881795845981157516604994291639750834285779043186149750164319950153126044364566323 + bits: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 13407807929942597099574024998205830437246153344875111580494527427714590099881680053891920200409570720654742146445677939306408461754626647833262056300743149 + cofactor: 1 +- polyname: JubJub names: - - P-521 - - 521-bit Random ECP Group - - secp521r1 - - ansip521r1 -983c305b650b95f6f943f84bc723287261a5980e02069d3c52628e01bfd0d009: + - JubJub + groups: + - other + hash: ca4d30e857ccff39e9d63cade2babe0322cb4f8dd9fc8a2011b7aff069314c8d + field: + type: + p: 52435875175126190479447740508185965837690552500527637822603658699938581184513 + bits: + params: + a: 52435875175126190479447740508185965837690552500527637822603658699938581184512 + d: 19257038036680949359750312669786877991949435402254120286184196891950884077233 + generator: + x: 8076246640662884909881801758704306714034609987455869804520522091855516602923 + "y": 13262374693698910701929044844600465831413122818447359594527400194675274060458 + form: + order: 6554484396890773809930967563523245729705921265872317281365359162392183254199 + cofactor: 8 +- polyname: K-163_ansit163k1_sect163k1_wap-wsg-idm-ecid-wtls3 names: - K-163 - sect163k1 - wap-wsg-idm-ecid-wtls3 - ansit163k1 -2f4174db73ccca30a2b56d298e794d01d87d3e9e87985f64f5bcf48dcfe8e020: - names: - - B-163 - - sect163r2 - - ansit163r2 -927fb3755e5a3ad74e7534091fc92509d12cdc0f9c46d4d1d7dce223773c3168: + groups: + - NIST + - SECG + - WTLS + - ANSI X9.63 + hash: 86e66e542b51a3d35fb0e70253efc626723a2cbce002a12c7290956ae3e6629b + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 1 + b: 1 + generator: + x: 4373527398576640063579304354969275615843559206632 + "y": 3705292482178961271312284701371585420180764402649 + form: + order: 5846006549323611672814741753598448348329118574063 + cofactor: 2 +- polyname: K-233_ansit233k1_sect233k1_wap-wsg-idm-ecid-wtls10 names: - K-233 - sect233k1 - wap-wsg-idm-ecid-wtls10 - ansit233k1 -d5881c40056b59a995efa112ace22c25af6347021ea361484e4b74e28d319445: - names: - - B-233 - - sect233r1 - - wap-wsg-idm-ecid-wtls11 - - ansit233r1 -5ddf6e1e1b09abc122ca3a3a2074882374d0436090cb719048435f1f9a27b270: + groups: + - NIST + - SECG + - WTLS + - ANSI X9.63 + hash: 6fbf2ddd1b14a32131b7b473d600d8cc36fa6a6f58e5545fa18004d700474da7 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 1 + generator: + x: 9980522611481012342443087688797002679043489582926858424680330554073382 + "y": 12814767389816757102953168016268660157166792010263439198493421287958179 + form: + order: 3450873173395281893717377931138512760570940988862252126328087024741343 + cofactor: 4 +- polyname: K-283_ansit283k1_sect283k1 names: - K-283 - sect283k1 - ansit283k1 -19ccc60865dc70283adfa27c3056327a227207db640decbd5375594f96443688: - names: - - B-283 - - sect283r1 - - ansit283r1 -5ad06e30fa345f13674e386b21720ac827f35cbacfb5163a4ea544aca045e60c: + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 62291325913339157698052480b78ed063b5f968942ba430ee35799aa091e8bf + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 1 + generator: + x: 9737095673315832344313391497449387731784428326114441977662399932694280557468376967222 + "y": 3497201781826516614681192670485202061196189998012192335594744939847890291586353668697 + form: + order: 3885337784451458141838923813647037813284811733793061324295874997529815829704422603873 + cofactor: 4 +- polyname: K-409_ansit409k1_sect409k1 names: - K-409 - sect409k1 - ansit409k1 -e36aa18cb3619e03e38c6f29894f667db7f866d48ca9d926bb4c54c1950d7abe: - names: - - B-409 - - sect409r1 - - ansit409r1 -036ba0dc2feb5900dedb555cc220c43373fa25e30e67af831d87f35e18dadb95: + groups: + - NIST + - SECG + - ANSI X9.63 + hash: f50dd14f2e0273dd791f1093770ef30fefdf6523a8e53d190a227e5be5402fa7 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 1 + generator: + x: 250320606379109783324043328573944955992891736106680352671677389786222910027088291741834878773922859231376787355260678190918 + "y": 1248286015820357801871250692732381479576954307085883348044850800154576601694946857655762823838587314348501053191643883120747 + form: + order: 330527984395124299475957654016385519914202341482140609642324395022880711289249191050673258457777458014096366590617731358671 + cofactor: 4 +- polyname: K-571_ansit571k1_sect571k1 names: - K-571 - sect571k1 - ansit571k1 -bd5349da0423cbdbf1f6433478cd3e594d2ccdf926d260cd9980e04aef4c5646: + groups: + - NIST + - SECG + - ANSI X9.63 + hash: 5ba4dc3350497b6e43c97a06b91f0428eac7bb0c79ebd76d95a05f9df74cdf12 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 1 + generator: + x: 2350112116304015523482377231684766626496228526415123964355167346023168453994712131915750801804327368697642410358740900984083649787136749901162917044657353481320802543241586 + "y": 3177153047892284027955092820645594290840691892110463136294318330308675645046690871624329737215785097835850661950174873195667225591921644089615520604151251098277510177212323 + form: + order: 1932268761508629172347675945465993672149463664853217499328617625725759571144780212268133978522706711834706712800825351461273674974066617311929682421617092503555733685276673 + cofactor: 4 +- polyname: M-221 names: - - B-571 - - sect571r1 - - ansit571r1 -9ac4d84e429ea53fb084aca3ced6baede9c3fd7e0fd2f1af1961b952893a42eb: + - M-221 + groups: + - other + hash: 264ec4daddc1829f44986a1999e3161edc4dba98b3dcb1b012fce596000ce767 + field: + type: + p: 3369993333393829974333376885877453834204643052817571560137951281149 + bits: + params: + a: 117050 + b: 1 + generator: + x: 4 + "y": 1630203008552496124843674615123983630541969261591546559209027208557 + form: + order: 421249166674228746791672110734682167926895081980396304944335052891 + cofactor: 8 +- polyname: M-383 names: - - numsp256d1 -a6ee4fb29783e4e49911ecbba771767abb89fca3855192f8a92d45965a151e38: + - M-383 + groups: + - other + hash: a6fbb5a8ee334b9873692709d5a13cac3ee4199f073b2922c72c17179f155fc4 + field: + type: + p: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995153221 + bits: + params: + a: 2065150 + b: 1 + generator: + x: 12 + "y": 4737623401891753997660546300375902576839617167257703725630389791524463565757299203154901655432096558642117242906494 + form: + order: 2462625387274654950767440006258975862817483704404090416746934574041288984234680883008327183083615266784870011007447 + cofactor: 8 +- polyname: M-511 names: - - numsp256t1 -41e21f03c7106878b7b9547a9efb1906068a17e29793cd0276c5bfa28ccaa253: + - M-511 + groups: + - other + hash: e6d7a21d892f37e175ac62c7430a90fd51d29b4c95435564abbd3b8b56aecd25 + field: + type: + p: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503041861 + bits: + params: + a: 530438 + b: 1 + generator: + x: 5 + "y": 2500410645565072423368981149139213252211568685173608590070979264248275228603899706950518127817176591878667784247582124505430745177116625808811349787373477 + form: + order: 837987995621412318723376562387865382967460363787024586107722590232610251879607410804876779383055508762141059258497448934987052508775626162460930737942299 + cofactor: 8 +- polyname: MDC201601 names: - - numsp384d1 -64043364ad1219d1799ad0d0dd9445598873ca9e456dc49959778f157136bc2f: + - MDC201601 + groups: + - other + hash: cbd49900f1e53ccb6ccf6b7ad943607f64ef1847c79802119e758e4a26370b5a + field: + type: + p: 109112363276961190442711090369149551676330307646118204517771511330536253156371 + bits: + params: + c: 1 + d: 39384817741350628573161184301225915800358770588933756071948264625804612259721 + generator: + x: 82549803222202399340024462032964942512025856818700414254726364205096731424315 + "y": 91549545637415734422658288799119041756378259523097147807813396915125932811445 + form: + order: 27278090819240297610677772592287387918930509574048068887630978293185521973243 + cofactor: 4 +- polyname: Oakley Group 3 names: - - numsp384t1 -b085bc275200ff0edde34f8ba2a34ebfa9ceff2418a7652475375b599a8f6263: + - Oakley Group 3 + groups: + - Oakley + hash: 5f4e685951dd43f397d5a0e7f5f35c11a2404f85478321c2519c9ecb49eed1a1 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 471951 + form: + order: 45671926166590716193865565914344635196769237316 + cofactor: 1 +- polyname: Oakley Group 4 names: - - numsp512d1 -db4e2c3fe9301769e7ce39f53e219810d66178b3b324e586fff3af8075ce5dbf: + - Oakley Group 4 + groups: + - Oakley + hash: 8851d5a49ea75409fbae978f5d439f511e6652c378d352d706fb1d9388f7a702 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 7913 + form: + order: 49039857307708443467467104857652682248052385001045053116 + cofactor: 1 +- polyname: Pallas names: - - numsp512t1 -aea77a42ce090418c12ad18a52d26f9d126ab2e80089618b1a0dc1c3fb4e7582: + - Pallas + groups: + - other + hash: 92f79852bdf4619fa8f3cb4058e477b93d66e9566a5c7c6f71d1c86999f36636 + field: + type: + p: 28948022309329048855892746252171976963363056481941560715954676764349967630337 + bits: + params: + a: 0 + b: 5 + generator: + x: 28948022309329048855892746252171976963363056481941560715954676764349967630336 + "y": 2 + form: + order: 28948022309329048855892746252171976963363056481941647379679742748393362948097 + cofactor: 1 +- polyname: SM2 names: - - ed-256-mont -2677fde5f2a88ef400c5944a07e465afeb919915624b620e2adce804de42da94: + - SM2 + groups: + - OSCAA + hash: 9c0fd9ab4a7996e19ab32c78dd35d2c045bcb35800e884e6512140835511d891 + field: + type: + p: 115792089210356248756420345214020892766250353991924191454421193933289684991999 + bits: + params: + a: 115792089210356248756420345214020892766250353991924191454421193933289684991996 + b: 18505919022281880113072981827955639221458448578012075254857346196103069175443 + generator: + x: 22963146547237050559479531362550074578802567295341616970375194840604139615431 + "y": 85132369209828568825618990617112496413088388631904505083283536607588877201568 + form: + order: 115792089210356248756420345214020892766061623724957744567843809356293439045923 + cofactor: 1 +- polyname: Tom-256 names: - - ed-254-mont -28c588175cb9d9b60e2e0917c9d370be47e0583b22a6600a96148250e4859d44: + - Tom-256 + groups: + - other + hash: c9738c93e9879f4cc138a4dd80b5a3bdf51a58ce71d1d7aeb4633e7246a01132 + field: + type: + p: 115792089210356248762697446949407573530594504085698471288169790229257723883799 + bits: + params: + a: 115792089210356248762697446949407573530594504085698471288169790229257723883796 + b: 81531206846337786915455327229510804132577517753388365729879493166393691077718 + generator: + x: 3 + "y": 40902200210088653215032584946694356296222563095503428277299570638400093548589 + form: + order: 115792089210356248762697446949407573530086143415290314195533631308867097853951 + cofactor: 1 +- polyname: Tom-384 names: - - ed-255-mers -'058011f238d00a91fe2fd46a6297a5da4c13e3289c6a6fcd3fc315d4547b4d0e': + - Tom-384 + groups: + - other + hash: 1f2319155b805932e5cffdd90f62245cf8c99c919ac580979ad02c78a54aa53d + field: + type: + p: 39402006196394479212279040100143613805079739270465446667940039326625812510850684806287457257749692633059273959086021 + bits: + params: + a: 20026862879313379863654166607105301622642181700373777070134388010349273891892149760539610171757683236290527048057018 + b: 23911602450661234612404882548336064535929415695327240026670179346429452149970125567156571346957298429887433518292555 + form: + order: 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319 + cofactor: 1 +- polyname: Tom-521 names: - - ed-384-mont -b9b96b8de7e9de4ed94ce92030c2c8ade375f0771d81e3b7fa3a8b5dab7fab1b: + - Tom-521 + groups: + - other + hash: 8ea93567c1058ee0f5ef734e0c0da5afe24f8a5e29b3c3cb9d602f3c63dcc082 + field: + type: + p: 6864797660130609714981900799081393217269435300143305409394463459185543183397661185305296734178420671269665416453639305952979026956266322795023512882444055113 + bits: + params: + a: 3209713904684906354012661528459023640897134508190122320972861780394466673288993283913171594605588414874888180171568616344548577233510087636356726171377149922 + b: 814335665749069324950189573282961229628427636202131512537771208808489331024392056918381454380460292918303892046559533938729632355763728253895986616673142557 + form: + order: 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151 + cofactor: 1 +- polyname: Tweedledee names: - - ed-382-mont -4ce17230f0e0e7ed4bd7ac426b63a0c21f722bee454f418f65ddd710ee60d1e2: + - Tweedledee + groups: + - other + hash: 7726bfd92bfa0cbcf4615458d2e04034118defdca68695e1147f13e0066523a3 + field: + type: + p: 28948022309329048855892746252171976963322203655954433126947083963168578338817 + bits: + params: + a: 0 + b: 5 + generator: + x: 28948022309329048855892746252171976963322203655954433126947083963168578338816 + "y": 2 + form: + order: 28948022309329048855892746252171976963322203655955319056773317069363642105857 + cofactor: 1 +- polyname: Tweedledum names: - - ed-383-mers -1aa1fb802ede4a2974e4fc4b8022134c596b76a1d501f105b16620de766151f5: + - Tweedledum + groups: + - other + hash: f129abe8754be7807f50f21abf464e42236cbc1de48fb062d5337e93fced5d0a + field: + type: + p: 28948022309329048855892746252171976963322203655955319056773317069363642105857 + bits: + params: + a: 0 + b: 5 + generator: + x: 28948022309329048855892746252171976963322203655955319056773317069363642105856 + "y": 2 + form: + order: 28948022309329048855892746252171976963322203655954433126947083963168578338817 + cofactor: 1 +- polyname: Vesta names: - - ed-512-mont -19166486235180b11e6db73d60e91d6f447482c14426cff1fd6c67a21137a516: + - Vesta + groups: + - other + hash: d9139377fe92f85924c4be89224f51c3ffc2d5f57d3916dabf8963d9cb27fab8 + field: + type: + p: 28948022309329048855892746252171976963363056481941647379679742748393362948097 + bits: + params: + a: 0 + b: 5 + generator: + x: 28948022309329048855892746252171976963363056481941647379679742748393362948096 + "y": 2 + form: + order: 28948022309329048855892746252171976963363056481941560715954676764349967630337 + cofactor: 1 +- polyname: ansip160k1_secp160k1 names: - - ed-510-mont -e284f168dd01149fd8314cd017bfa7665631d190082786dcef9192f54c31ce9e: + - secp160k1 + - ansip160k1 + groups: + - SECG + - ANSI X9.63 + hash: 3c6ce33bf9a9905721e5cf6ba2329fd882a66ec843f4b6a2648d74726aff972d + field: + type: + p: 1461501637330902918203684832716283019651637554291 + bits: + params: + a: 0 + b: 7 + generator: + x: 338530205676502674729549372677647997389429898939 + "y": 842365456698940303598009444920994870805149798382 + form: + order: 1461501637330902918203686915170869725397159163571 + cofactor: 1 +- polyname: ansip160r1_secp160r1_wap-wsg-idm-ecid-wtls7 names: - - ed-511-mers -85416bf96091f71904873c07fb0a0036dbf9928c695d5467c8367b9fb2d610d3: + - secp160r1 + - wap-wsg-idm-ecid-wtls7 + - ansip160r1 + groups: + - SECG + - WTLS + - ANSI X9.63 + hash: a3b4073ef7107e871249dff13c1994d219b10ea58b575990f02d9d9d1b3eb666 + field: + type: + p: 1461501637330902918203684832716283019653785059327 + bits: + params: + a: 1461501637330902918203684832716283019653785059324 + b: 163235791306168110546604919403271579530548345413 + generator: + x: 425826231723888350446541592701409065913635568770 + "y": 203520114162904107873991457957346892027982641970 + form: + order: 1461501637330902918203687197606826779884643492439 + cofactor: 1 +- polyname: ansip160r2_secp160r2 names: - - w-256-mont -0e6bd66d03ff9f66265a16cd5375c3829b486e64c0d799fe48d76c331d04052b: + - secp160r2 + - ansip160r2 + groups: + - SECG + - ANSI X9.63 + hash: aed23acd7a371dc6573190bed02da2c81db54c4e774833cff874340da3861072 + field: + type: + p: 1461501637330902918203684832716283019651637554291 + bits: + params: + a: 1461501637330902918203684832716283019651637554288 + b: 1032640608390511495214075079957864673410201913530 + generator: + x: 473058756663038503608844550604547710019657059949 + "y": 1454008495369951658060798698479395908327453245230 + form: + order: 1461501637330902918203685083571792140653176136043 + cofactor: 1 +- polyname: ansip192k1_secp192k1 names: - - w-254-mont -e0472527790c40f65c2512b418a4e195622d335dcaa07b24ec8d1a9fb6a748f8: + - secp192k1 + - ansip192k1 + groups: + - SECG + - ANSI X9.63 + hash: 6e1109fe1c214a0ee91b119ac1f623696d5dbb7bfa157e253089a4c89fb25287 + field: + type: + p: 6277101735386680763835789423207666416102355444459739541047 + bits: + params: + a: 0 + b: 3 + generator: + x: 5377521262291226325198505011805525673063229037935769709693 + "y": 3805108391982600717572440947423858335415441070543209377693 + form: + order: 6277101735386680763835789423061264271957123915200845512077 + cofactor: 1 +- polyname: ansip224k1_secp224k1 names: - - w-255-mers -b8bc63e8d6083d93edd028c597e98005934428b4c2b44848c85f1fde9a86f5c3: + - secp224k1 + - ansip224k1 + groups: + - SECG + - ANSI X9.63 + hash: cf9aad35e87aafb45f05dfc86a3792d8f724ec16c144374d6a055ad4f0732845 + field: + type: + p: 26959946667150639794667015087019630673637144422540572481099315275117 + bits: + params: + a: 0 + b: 5 + generator: + x: 16983810465656793445178183341822322175883642221536626637512293983324 + "y": 13272896753306862154536785447615077600479862871316829862783613755813 + form: + order: 26959946667150639794667015087019640346510327083120074548994958668279 + cofactor: 1 +- polyname: ansip256k1_secp256k1 names: - - w-384-mont -566d4e5becfbeb4565c8124f3658108df6016e46f03de383f907c7eba82c8b15: + - secp256k1 + - ansip256k1 + groups: + - SECG + - ANSI X9.63 + hash: 219598a62e4281e177220788b6f4d9ad3327e16e2ef73c2392638eb8de0301d8 + field: + type: + p: 115792089237316195423570985008687907853269984665640564039457584007908834671663 + bits: + params: + a: 0 + b: 7 + generator: + x: 55066263022277343669578718895168534326250603453777594175500187360389116729240 + "y": 32670510020758816978083085130507043184471273380659243275938904335757337482424 + form: + order: 115792089237316195423570985008687907852837564279074904382605163141518161494337 + cofactor: 1 +- polyname: ansit163r1_sect163r1 names: - - w-382-mont -9fb32e64ed8b4d9e4e975baa08fb20f7b4698e284861c19a8b650734947ca4ab: + - sect163r1 + - ansit163r1 + groups: + - SECG + - ANSI X9.63 + hash: 4379e18c46b9a01f41d46829786c915a43951716228af85e88bb41ce19e0b040 + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 11272584574060402170600355401469405585559711656674 + b: 10341149448350347985759700389662805134872097107929 + generator: + x: 4987329473907365857178124865428460464972118795860 + "y": 384617752061712164277996110850745784319273334915 + form: + order: 5846006549323611672814738465098798981304420411291 + cofactor: 2 +- polyname: ansit193r1_sect193r1 names: - - w-383-mers -dddf09475381cb3ed989b02e00c5396be1b1dbbb78b9a47199ba72f381a12b4d: + - sect193r1 + - ansit193r1 + groups: + - SECG + - ANSI X9.63 + hash: 34e6f5e062a0f78f9daa169cff592dc858fae4e9d794df1e297e7025231a7473 + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 576751075026818752436662854952381179295973340004111842049 + b: 6227610566229294112017936480812099737256078134172818311188 + generator: + x: 12272390550309971036302743370064453956929989632374098413025 + "y": 929037239281491062957629204723061153948896755298992003845 + form: + order: 6277101735386680763835789423269548053691575186051040197193 + cofactor: 2 +- polyname: ansit193r2_sect193r2 names: - - w-512-mont -70815382861bc9f89725ab120013f4fcda598851144c735c969db19449c3aea0: + - sect193r2 + - ansit193r2 + groups: + - SECG + - ANSI X9.63 + hash: cc4b389455331f7a00d54315db9062dcf49977259f1a8f5e227d1d61ed350f8d + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 8727883239842844933732220251183800395075376381527050055835 + b: 4946476016329916785216072668156805272487483199688540362414 + generator: + x: 5338303459516340642470631733027504050881957481257426321039 + "y": 11342401828932489703393760444197037534175341100765106065260 + form: + order: 6277101735386680763835789423314955362437298222279840143829 + cofactor: 2 +- polyname: ansit239k1_sect239k1 names: - - w-510-mont -2a3d62589f3f9d722e85c5a1c95435abbecd7c22f77f774dcc409d3131cdf4da: + - sect239k1 + - ansit239k1 + groups: + - SECG + - ANSI X9.63 + hash: fe892081f740c00c93be3e279156e027c640ae7a1b0e6f5bdba789a9c30e6eef + field: + type: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + bits: + degree: + basis: + params: + a: 0 + b: 1 + generator: + x: 287304427851433003189509051221031978591368025490899286200762613294446044 + "y": 815727950839377703994180670110555770834903050527325106707102047979958474 + form: + order: 220855883097298041197912187592864814948216561321709848887480219215362213 + cofactor: 4 +- polyname: bn158 names: - - w-511-mers -648fdd82831bd65ba4cf0bdaf3e1316664e956e838054a35343583d6648d6bef: + - bn158 + groups: + - Barreto-Naehrig + hash: d5c86d2efdbf00b2ddfdde04898bab355290de1a67e0c22195569ce58634b196 + field: + type: + p: 206327671360737302491015800744139033450591027219 + bits: + params: + a: 0 + b: 17 + generator: + x: 206327671360737302491015800744139033450591027218 + "y": 4 + form: + order: 206327671360737302491015346511080613560608358413 + cofactor: 1 +- polyname: bn190 names: - - Oakley Group 3 -262b61117cfb5884159c6069a566136c9806d4354591e3da7a1922ba70f821e7: + - bn190 + groups: + - Barreto-Naehrig + hash: 0d9442683138275bc09d27a6edaa55eae84e6de4a4316e2f5ca386d1ce63a97b + field: + type: + p: 882718062907666288196217719514349254081211436031597871123 + bits: + params: + a: 0 + b: 4097 + generator: + x: 882718062907666288196217719514349254081211436031597871122 + "y": 64 + form: + order: 882718062907666288196217719484638682513035928574189633549 + cofactor: 1 +- polyname: bn222 names: - - Oakley Group 4 -848889acc30963b2c2ae1bdd8a95b680f32075ba3fefe07e96ade71fcf630c2e: + - bn222 + groups: + - Barreto-Naehrig + hash: 9eb89ae43e936c35af50a712197d8bec78466a1e512e613cd69b8c744ba9d7d4 + field: + type: + p: 3776454638595735622662624104352071470606035506175466834584724832359 + bits: + params: + a: 0 + b: 257 + generator: + x: 3776454638595735622662624104352071470606035506175466834584724832358 + "y": 16 + form: + order: 3776454638595735622662624104352069527295808446240650308050481053793 + cofactor: 1 +- polyname: bn286 names: - - SM2 -c45ed96121d651697b6c9b4e6426aa3502c5461cf1c26c3ab3c5098474321c92: + - bn286 + groups: + - Barreto-Naehrig + hash: d80a383fff8d17ecc6a701c22720945bb012ddcbc631e408a4179c8e39ed8c00 + field: + type: + p: 70004402153711663438486789763681164697717379781714415888917198592851957854802452414483 + bits: + params: + a: 0 + b: 2 + generator: + x: 70004402153711663438486789763681164697717379781714415888917198592851957854802452414482 + "y": 1 + form: + order: 70004402153711663438486789763681164697717371414851075681210457293135137373936058105869 + cofactor: 1 +- polyname: bn318 names: - - M-221 -b402ada987eb2ce5f490ee2c96124da39c31252b17f6745136dbd658c77f9371: + - bn318 + groups: + - Barreto-Naehrig + hash: 351b645228392a6028570efa77ac529c8491179c186ee5c7db6f7cfc024f6253 + field: + type: + p: 300391510669785740008207650393722453451551004041839877989597999344720209212220677955394396491803 + bits: + params: + a: 0 + b: 2 + generator: + x: 300391510669785740008207650393722453451551004041839877989597999344720209212220677955394396491802 + "y": 1 + form: + order: 300391510669785740008207650393722453451551004041291798149912405964831108443866204630639420903397 + cofactor: 1 +- polyname: bn350 names: - - M-383 -7970af1679a5bd081dfeed40e3be4adf75dd86ff7684ecf426d7aad55c48b6c2: + - bn350 + groups: + - Barreto-Naehrig + hash: ccd24a0b0517090403e36049297d5d2cbc3d83ada30a0905ae03c2a6089cccfb + field: + type: + p: 1290053601431926622698139429963477963560185337848708333001329190095450433717605248005163618066274214477843 + bits: + params: + a: 0 + b: 2 + generator: + x: 1290053601431926622698139429963477963560185337848708333001329190095450433717605248005163618066274214477842 + "y": 1 + form: + order: 1290053601431926622698139429963477963560185337848708297084013012074484292947578599243756973055615218745357 + cofactor: 1 +- polyname: bn382 names: - - M-511 -1e94035f33f0f78a7a61dbe19d161aa12ef70e9dd051a286c1434bf0bad34dc8: + - bn382 + groups: + - Barreto-Naehrig + hash: 54a1f9dc227b479f822af8a960a1b59a09ab3adb1f341d2e7a8615f1ee98d387 + field: + type: + p: 5540996953667913971058039301942914304734176495422447785045292539108217242186829586959562222833658991069414454984723 + bits: + params: + a: 0 + b: 2 + generator: + x: 5540996953667913971058039301942914304734176495422447785045292539108217242186829586959562222833658991069414454984722 + "y": 1 + form: + order: 5540996953667913971058039301942914304734176495422447785042938606876043190415948413757785063597439175372845535461389 + cofactor: 1 +- polyname: bn414 names: - - E-222 -2db751c41d107e1fcdeba99861ea4d31949671dd4ec909185a4fd0ac96595090: + - bn414 + groups: + - Barreto-Naehrig + hash: 4bb2bf37ba3fd5d0b10e7eecc05d7b94bec4589ee5f85e3be64793d0bc1642bd + field: + type: + p: 23798378007415224600523786020682647333689401448557870707284910146274969430638668827605864233418695199132888067995603277185043 + bits: + params: + a: 0 + b: 2 + generator: + x: 23798378007415224600523786020682647333689401448557870707284910146274969430638668827605864233418695199132888067995603277185042 + "y": 1 + form: + order: 23798378007415224600523786020682647333689401448557870707284909992007740222957543118812793071766370473094186144051937595621389 + cofactor: 1 +- polyname: bn446 names: - - E-382 -bec6c0c586378dc002ab1998b1a687a1cbede358c8fd36558e2b2d0a4f62122f: + - bn446 + groups: + - Barreto-Naehrig + hash: e2fc556e362c7e60f0b3b3ca1d7e8566b0e131e2110b9dd5cd9bb3e16a050ebb + field: + type: + p: 102211695604069718983520304652693874995639508460729604902280098199792736381528662976886082950231100101353700265360419596271313339023463 + bits: + params: + a: 0 + b: 257 + generator: + x: 102211695604069718983520304652693874995639508460729604902280098199792736381528662976886082950231100101353700265360419596271313339023462 + "y": 16 + form: + order: 102211695604069718983520304652693874995639508460729604902280098199782626401528481486963081749137698194804284966854672709980015705456737 + cofactor: 1 +- polyname: bn478 names: - - E-521 -f933828a39b044812404b9dfc3efe63b5d654f7d33619bc9253930c19139ad83: + - bn478 + groups: + - Barreto-Naehrig + hash: 1b5032689449403ec088dfee078c3eab6941b3e479864b1c147e6ced3aac6613 + field: + type: + p: 438995889888186407347652991425301965681188858026820794321677547168174289793337316790981018819616267513532082540968716717668009346359904036716563 + bits: + params: + a: 0 + b: 2 + generator: + x: 438995889888186407347652991425301965681188858026820794321677547168174289793337316790981018819616267513532082540968716717668009346359904036716562 + "y": 1 + form: + order: 438995889888186407347652991425301965681188858026820794321677547168174289130769667499086895369551161693205410443647102461394826290024401809178637 + cofactor: 1 +- polyname: bn510 names: - - Curve25519 -4fd59c136badb98ab0069c6f3e38804e2b88e169643c49e18440c3698e0407a3: + - bn510 + groups: + - Barreto-Naehrig + hash: 808215301d36b95be3546a272b70e5aed44e09069004cd65d54f1cb9306f4767 + field: + type: + p: 1885472990148177717128295978135615557087890561449182466062048685887447869640291029478850359875117134356442109712418887586250126028988200000205538820358163 + bits: + params: + a: 0 + b: 257 + generator: + x: 1885472990148177717128295978135615557087890561449182466062048685887447869640291029478850359875117134356442109712418887586250126028988200000205538820358162 + "y": 16 + form: + order: 1885472990148177717128295978135615557087890561449182466062048685887447869640247607445386366301833287191462262201056384113205166186492699745384261711036429 + cofactor: 1 +- polyname: bn542 names: - - Curve448 -7a8cd97e019e1ff1697adf7ae8a23835f1f54ccbd6466d48c8f203d896db23ba: + - bn542 + groups: + - Barreto-Naehrig + hash: ab8783cacea77024c0e18abd3fb97c88e21bf7503ba9d0990cfc4da4dcd03176 + field: + type: + p: 8098075721811414878105028299024751526203735822988204570759586766702677409513512479452243326535098163859087683174740008257961979909363199815965376947448202431299603 + bits: + params: + a: 0 + b: 2 + generator: + x: 8098075721811414878105028299024751526203735822988204570759586766702677409513512479452243326535098163859087683174740008257961979909363199815965376947448202431299602 + "y": 1 + form: + order: 8098075721811414878105028299024751526203735822988204570759586766702677409513512476606531513682044191052700214290735060579726517341692215080330797439484071453392909 + cofactor: 1 +- polyname: bn574 names: - - Curve22103 -b67964f260cb9932d91a7537b4908f18025e68224f922d3c6973cacd8dff25b7: + - bn574 + groups: + - Barreto-Naehrig + hash: a75c8382d78d6234e67d40650e65b747144a8a313ddf10749d2d74e3b60f48f8 + field: + type: + p: 34780870876742995377456858134373496984033068311331682913917171552933960384313251034752424287877192201334219790531446172327873978399527076876359580494778958227471204544938003 + bits: + params: + a: 0 + b: 2 + generator: + x: 34780870876742995377456858134373496984033068311331682913917171552933960384313251034752424287877192201334219790531446172327873978399527076876359580494778958227471204544938002 + "y": 1 + form: + order: 34780870876742995377456858134373496984033068311331682913917171552933960384313251034752237791574610238612409960091596304949053522134642445830488254167660733023711241170845709 + cofactor: 1 +- polyname: bn606 names: - - Curve4417 -'095f5f2cda33c4ef1491dc8c0679220bdcdd371ff5c99fd2d3019775693ae162': + - bn606 + groups: + - Barreto-Naehrig + hash: 402c2b45187b6756504faa6c6870d34ee8fd2e0bd7f949cfabe3039247a545ba + field: + type: + p: 149382560479715729921650870888843346324510370210262391936546251975130529782979972747938509514543700633492700155237654428326390908646123885612873792268661751975617273279725264282340883 + bits: + params: + a: 0 + b: 2 + generator: + x: 149382560479715729921650870888843346324510370210262391936546251975130529782979972747938509514543700633492700155237654428326390908646123885612873792268661751975617273279725264282340882 + "y": 1 + form: + order: 149382560479715729921650870888843346324510370210262391936546251975130529782979972747938509502321484775485784316096253172769695086670946327244936307341349630660052453228888267876614669 + cofactor: 1 +- polyname: bn638 names: - - Curve1174 -45cefccfa11af979114308efce78ea85689aa3742cbcbf8f587ba3d55ee00c58: + - bn638 + groups: + - Barreto-Naehrig + hash: 747af30c015a93dc514891ef7e30071986b62a646f2751cafc75a2b1231568dc + field: + type: + p: 641593209463000238284923228689168801117629789043238356871360716989515584497239494051781991794253619096481315470262367432019698642631650152075067922231951354925301839708740457083469793717125223 + bits: + params: + a: 0 + b: 257 + generator: + x: 641593209463000238284923228689168801117629789043238356871360716989515584497239494051781991794253619096481315470262367432019698642631650152075067922231951354925301839708740457083469793717125222 + "y": 16 + form: + order: 641593209463000238284923228689168801117629789043238356871360716989515584497239494051781991794252818101344337098690003906272221387599391201666378807960583525233832645565592955122034352630792289 + cofactor: 1 +- polyname: brainpoolP160r1 names: - - Curve67254 -62c20e482369c0e5a34c700c66671327297693463c9baca668b2b1c4be075637: + - brainpoolP160r1 + groups: + - Brainpool + hash: 1a2362f0944bbdb25421939c5218ecd59dc1b4aac5ff180f588b1286edeeb867 + field: + type: + p: 1332297598440044874827085558802491743757193798159 + bits: + params: + a: 297190522446607939568481567949428902921613329152 + b: 173245649450172891208247283053495198538671808088 + generator: + x: 1089473557631435284577962539738532515920566082499 + "y": 127912481829969033206777085249718746721365418785 + form: + order: 1332297598440044874827085038830181364212942568457 + cofactor: 1 +- polyname: brainpoolP160t1 names: - - Curve383187 -b53bcee6c9171352dbca145da162bfe3fff812ff2360b6565340ab2dba36fd2e: + - brainpoolP160t1 + groups: + - Brainpool + hash: 94c1c30f85e6792400a52cacef9cb0f261da44a9b454500a4b2c204dc7dde187 + field: + type: + p: 1332297598440044874827085558802491743757193798159 + bits: + params: + a: 1332297598440044874827085558802491743757193798156 + b: 698401795719474705027684479972917623041381757824 + generator: + x: 1013918819608769552616977083272059630517089149816 + "y": 992437653978037713070561264469524978381944905901 + form: + order: 1332297598440044874827085038830181364212942568457 + cofactor: 1 +- polyname: brainpoolP192r1 names: - - Ed25519 -a53a7e42f99bfa40069d682f9d4486a393e42261ecbe9010eac1ffe5ef1ce85f: + - brainpoolP192r1 + groups: + - Brainpool + hash: 5c15c433a9fac89ed4cdb24a432742af16c64ce24cb7446778bc71e97fca95dc + field: + type: + p: 4781668983906166242955001894344923773259119655253013193367 + bits: + params: + a: 2613009377683017747869391908421543348309181741502784219375 + b: 1731160591135112004210203499537764623771657619977468323273 + generator: + x: 4723188856514392935399337699153522173525168621081341681622 + "y": 507884783101387741749746950209061101579755255809652136847 + form: + order: 4781668983906166242955001894269038308119863659119834868929 + cofactor: 1 +- polyname: brainpoolP192t1 names: - - Ed448 -a6fbddc8902044637263fc9b3ad7da9af5613f3bc1844bf6fd53c2679c286458: + - brainpoolP192t1 + groups: + - Brainpool + hash: 880846a1f993eff872830274261992587c034b8e508d2bb4f78f1fb4c36b5f99 + field: + type: + p: 4781668983906166242955001894344923773259119655253013193367 + bits: + params: + a: 4781668983906166242955001894344923773259119655253013193364 + b: 486321888066950067394881041525590797530120076120499518329 + generator: + x: 1444558712667280506885530592978306040338136913835324440873 + "y": 232764348904945951820395534722141373682806994795615748553 + form: + order: 4781668983906166242955001894269038308119863659119834868929 + cofactor: 1 +- polyname: brainpoolP224r1 names: - - Ed448-Goldilocks -4e03befe79dfd9257e7761c13f29717cf0f0195882cd7d598a3eba7b1060d824: + - brainpoolP224r1 + groups: + - Brainpool + hash: aeb7025fa5a3b345794b5fc8f03e24ffa12dd213e821ca2ed16ff1a141ce84bc + field: + type: + p: 22721622932454352787552537995910928073340732145944992304435472941311 + bits: + params: + a: 11020725272625742361946480833014344015343456918668456061589001510723 + b: 3949606626053374030787926457695139766118442946052311411513528958987 + generator: + x: 1428364927244201726431498207475486496993067267318520844137448783997 + "y": 9337555360448823227812410753177468631215558779020518084752618816205 + form: + order: 22721622932454352787552537995910923612567546342330757191396560966559 + cofactor: 1 +- polyname: brainpoolP224t1 names: - - Curve41417 -a7274b645eb1523cdf83977d8f025b07c66cee2e9d515256a45ac6e6ecbe8525: + - brainpoolP224t1 + groups: + - Brainpool + hash: e7658e5cbaefe561985f6a932331ca747936acc6c0f786846c7d20a0001b6916 + field: + type: + p: 22721622932454352787552537995910928073340732145944992304435472941311 + bits: + params: + a: 22721622932454352787552537995910928073340732145944992304435472941308 + b: 7919603849831377222129533323916957959225380016698795812027476510861 + generator: + x: 11236281700362234642592534287151572422539408672654616227474732012928 + "y": 364032462118593425315751587028126980694396626774408344039871404876 + form: + order: 22721622932454352787552537995910923612567546342330757191396560966559 + cofactor: 1 +- polyname: brainpoolP256r1 names: - - Fp254BNa -43be14f890f5ea448df257acacadb2742e0ec33e4d1726de30bb599336462352: + - brainpoolP256r1 + groups: + - Brainpool + hash: b166f71608b362cb4fd38863fd6dc288bbbc954801fe9dcd3f18e36c61424346 + field: + type: + p: 76884956397045344220809746629001649093037950200943055203735601445031516197751 + bits: + params: + a: 56698187605326110043627228396178346077120614539475214109386828188763884139993 + b: 17577232497321838841075697789794520262950426058923084567046852300633325438902 + generator: + x: 63243729749562333355292243550312970334778175571054726587095381623627144114786 + "y": 38218615093753523893122277964030810387585405539772602581557831887485717997975 + form: + order: 76884956397045344220809746629001649092737531784414529538755519063063536359079 + cofactor: 1 +- polyname: brainpoolP256t1 names: - - Fp254n2BNa -9f4fed5f9caece664a40755f46ec4ba3cd730083cb1c7be2626c12fd0b2f2e11: + - brainpoolP256t1 + groups: + - Brainpool + hash: c1b58c9e0b3785e11f698321ca9f4d57933e56e7f2ea5b91ac656555d40dd021 + field: + type: + p: 76884956397045344220809746629001649093037950200943055203735601445031516197751 + bits: + params: + a: 76884956397045344220809746629001649093037950200943055203735601445031516197748 + b: 46214326585032579593829631435610129746736367449296220983687490401182983727876 + generator: + x: 74138526386500101787937404544159543470173440588427591213843535686338908194292 + "y": 20625154686056605250529482107801269759951443923312408063441227608803066104254 + form: + order: 76884956397045344220809746629001649092737531784414529538755519063063536359079 + cofactor: 1 +- polyname: brainpoolP320r1 names: - - Fp224BN -b374493adde78c65902f159562acbb9be99fb55041a78e1f9b256654e4b4e3c9: + - brainpoolP320r1 + groups: + - Brainpool + hash: 22f9e79e58fbc0f169fbde2b65399cb2da92d5a031e9f18efe1b48fb8d0a1c09 + field: + type: + p: 1763593322239166354161909842446019520889512772719515192772960415288640868802149818095501499903527 + bits: + params: + a: 524709318439392693105919717518043758943240164412117372990311331314771510648804065756354311491252 + b: 684460840191207052139729091116995410883497412720006364295713596062999867796741135919289734394278 + generator: + x: 565203972584199378547773331021708157952136817703497461781479793049434111597020229546183313458705 + "y": 175146432689526447697480803229621572834859050903464782210773312572877763380340633688906597830369 + form: + order: 1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921 + cofactor: 1 +- polyname: brainpoolP320t1 names: - - Fp256BN -2c019068020399897a75eceafae0892e9bf878ba3744b856fa3ba65285973239: + - brainpoolP320t1 + groups: + - Brainpool + hash: 5ff5f82c4602a728ead88b9e00f242956689d98478fa0c4881076aaac00a107e + field: + type: + p: 1763593322239166354161909842446019520889512772719515192772960415288640868802149818095501499903527 + bits: + params: + a: 1763593322239166354161909842446019520889512772719515192772960415288640868802149818095501499903524 + b: 1401395435032847536924656852322353441447762422733674743806973258207878888547540276867732868432723 + generator: + x: 1221175819973001316491038958226563119032598033059331804921649457916311604176688737745420093746514 + "y": 832095900618272253462376182163435186143818309959785348829039065198217071225345202726924484399811 + form: + order: 1763593322239166354161909842446019520889512772717686063760686124016784784845843468355685258203921 + cofactor: 1 +- polyname: brainpoolP384r1 names: - - Fp384BN -b777b0362cf5c04d091eb18edfd4690e1acd4aa2b2e407b6f124015160ba10ba: + - brainpoolP384r1 + groups: + - Brainpool + hash: ad7f418a82e1c56dca39f2eb3a4bf25fdf0946d8ce064799064e03cbb46d8da8 + field: + type: + p: 21659270770119316173069236842332604979796116387017648600081618503821089934025961822236561982844534088440708417973331 + bits: + params: + a: 19048979039598244295279281525021548448223459855185222892089532512446337024935426033638342846977861914875721218402342 + b: 717131854892629093329172042053689661426642816397448020844407951239049616491589607702456460799758882466071646850065 + generator: + x: 4480579927441533893329522230328287337018133311029754539518372936441756157459087304048546502931308754738349656551198 + "y": 21354446258743982691371413536748675410974765754620216137225614281636810686961198361153695003859088327367976229294869 + form: + order: 21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941 + cofactor: 1 +- polyname: brainpoolP384t1 names: - - Fp512BN -0f8e843e06b27a9d4a7755ce53e205e608a987cb04698672b71a9d0f1d6e7791: + - brainpoolP384t1 + groups: + - Brainpool + hash: fc072d295577cc2e887e131614d3ac3136f410a26178e75b17b4bb2168323a19 + field: + type: + p: 21659270770119316173069236842332604979796116387017648600081618503821089934025961822236561982844534088440708417973331 + bits: + params: + a: 21659270770119316173069236842332604979796116387017648600081618503821089934025961822236561982844534088440708417973328 + b: 19596161053329239268181228455226581162286252326261019516900162717091837027531392576647644262320816848087868142547438 + generator: + x: 3827769047710394604076870463731979903132904572714069494181204655675960538951736634566672590576020545838501853661388 + "y": 5797643717699939326787282953388004860198302425468870641753455602553471777319089854136002629714659021021358409132328 + form: + order: 21659270770119316173069236842332604979796116387017648600075645274821611501358515537962695117368903252229601718723941 + cofactor: 1 +- polyname: brainpoolP512r1 names: - - ssc-160 -90de63402e0677d59c16d67dddc18cb58358fc7e71f11e673e8ae4607b3d8ca3: + - brainpoolP512r1 + groups: + - Brainpool + hash: 34238ad2272125ae93f35ff7e63c288d752b042ba6a8ec2a78ca3bad4ad45e27 + field: + type: + p: 8948962207650232551656602815159153422162609644098354511344597187200057010413552439917934304191956942765446530386427345937963894309923928536070534607816947 + bits: + params: + a: 6294860557973063227666421306476379324074715770622746227136910445450301914281276098027990968407983962691151853678563877834221834027439718238065725844264138 + b: 3245789008328967059274849584342077916531909009637501918328323668736179176583263496463525128488282611559800773506973771797764811498834995234341530862286627 + generator: + x: 6792059140424575174435640431269195087843153390102521881468023012732047482579853077545647446272866794936371522410774532686582484617946013928874296844351522 + "y": 6592244555240112873324748381429610341312712940326266331327445066687010545415256461097707483288650216992613090185042957716318301180159234788504307628509330 + form: + order: 8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169 + cofactor: 1 +- polyname: brainpoolP512t1 names: - - ssc-192 -c7b6730003dde2ed65406a80aa65b3a12057c8a018594e73d6e91b8cd0b57efd: + - brainpoolP512t1 + groups: + - Brainpool + hash: 99a08f2850ecc06ce28c6130bcafff9ac62ff948dc1a37a4cec0b113dfaec9f1 + field: + type: + p: 8948962207650232551656602815159153422162609644098354511344597187200057010413552439917934304191956942765446530386427345937963894309923928536070534607816947 + bits: + params: + a: 8948962207650232551656602815159153422162609644098354511344597187200057010413552439917934304191956942765446530386427345937963894309923928536070534607816944 + b: 6532815740455945129522030162820444801309011444717674409730083343052139800841847092116476221316466234404847931899409316558007222582458822004777353814164030 + generator: + x: 5240454105373391383446315535930423532243726242869439206480578543706358506399554673205583372921814351137736817888782671966171301927338369930113338349467098 + "y": 4783098043208509222858478731459039446855297686825168822962919559100076900387655035060042118755576220187973470126780576052258118403094460341772613532037938 + form: + order: 8948962207650232551656602815159153422162609644098354511344597187200057010413418528378981730643524959857451398370029280583094215613882043973354392115544169 + cofactor: 1 +- polyname: c2onb191v4 names: - - ssc-224 -3dc6098180a4b1a159091c15c96103173bc6d24db7cc44c537650f82245faecf: + - c2onb191v4 + groups: + - ANSI x9.62 + hash: c71482115854a16fde66b7c1a4ae0ff447a47351a77dda710a5730beea7657cd + field: + type: + bits: + degree: + basis: + poly: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + params: + a: 2490328457996683894551555987103513651881566980652834128104 + b: 2069589631563520592511957790667039475691418642452163834523 + generator: + x: 14765250936012007849241168008515103696945072611374449793354 + "y": + raw: + form: + order: 1569275433846670190958947355850489840390288316692555548253 + cofactor: 2 +- polyname: c2onb191v5 names: - - ssc-256 -57b4ab43950ab77140395ae5da935884a3867aba367c2bb1883b21f7a0535c1f: + - c2onb191v5 + groups: + - ANSI x9.62 + hash: 90d562a5149b936a1e000b7b265090b00befb6daa1094579c0b70075e5575930 + field: + type: + bits: + degree: + basis: + poly: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + params: + a: 931069021823909654749316015134821322460351328265148895483 + b: 2893288371516077842516081652509030283555284251955443122628 + generator: + x: 19863303663211211550098344327591871942830640930883979132008 + "y": + raw: + form: + order: 392318858461667547739736838945125218608676137305618089511 + cofactor: 8 +- polyname: c2onb239v4 names: - - ssc-288 -ecbfc4a17aca1ee85270a7dd42864fa276379c0ad674af43972daa375612a54f: + - c2onb239v4 + groups: + - ANSI x9.62 + hash: 265c2b547ae15ae355aec4bab1983c0bb258fcad3ca8f6a48f806f7c0e57c5ed + field: + type: + bits: + degree: + basis: + poly: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + params: + a: 166877475359453247099153924443508767393405085402883002702074889477410352 + b: 141340481199021204520187121076616885086035481499419887944587244104445736 + generator: + x: 5804872217470585453899523863186696418250461312963296954511959355480113412 + "y": + raw: + form: + order: 220855883097298041197912187592864814848700889963720502470613317401095819 + cofactor: 4 +- polyname: c2onb239v5 names: - - ssc-320 -c883eed0117707b64bb9c5d2dbe4391d79fbd816e051062b1061aa56daa77a1b: + - c2onb239v5 + groups: + - ANSI x9.62 + hash: e43e0ce63f7cf8c5fb9ff2377fa8a53447c2614bb53becbfba00bc367dd3d9b0 + field: + type: + bits: + degree: + basis: + poly: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + - coeff: 1 + power: + params: + a: 212636007447379433435622401698068969451405179162726289180067592233699438 + b: 434010398859137856095240063722074571529440966813065624110982648066771821 + generator: + x: 3707598632149345176333280744007357076026568251553382570749857768972482744 + "y": + raw: + form: + order: 147237255398198694131941458395243209941155336136268919080327220639225603 + cofactor: 6 +- polyname: c2pnb163v1_wap-wsg-idm-ecid-wtls5 names: - - ssc-384 -e303c034984ad50ea13e98b82ab75f319a01e36b8302db9ff813579ad553da8f: + - wap-wsg-idm-ecid-wtls5 + - c2pnb163v1 + groups: + - WTLS + - ANSI x9.62 + hash: 875ee8ac107e3e2cb3b586f461c32381058d788b5a9b808238641444b138b88d + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 10443320962232641889919257604546406114902811759170 + b: 1149324396657421150694884172923012442275218052313 + generator: + x: 11231939716319002641657718190438797246676750304203 + "y": 2809606869339171705995869785003496413002248735391 + form: + order: 5846006549323611672814741626226392056573832638401 + cofactor: 2 +- polyname: c2pnb163v2 names: - - ssc-512 -8a627fcd61172caae3c68009e54ece764bd3f0361a32ec4844431e66b66b48cb: + - c2pnb163v2 + groups: + - ANSI x9.62 + hash: 288aede44c51c585f7ac18e908fa7684249a3fb07218b82f195a1f7fc4dc7d1b + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 1511179201384257398748279396561103095760533909618 + b: 9360892092230448128491690600630428180976923893536 + generator: + x: 206380705201355055620354100931657872376594132165 + "y": 11140567055043213316137325066904753838562980503493 + form: + order: 5846006549323611672814736867226446213508588572839 + cofactor: 2 +- polyname: c2pnb163v3 names: - - Tweedledum -97b3ec0b049865ee9d32d6e768b7e7d40659f137a1c5f3313b7c3296fa8d3355: + - c2pnb163v3 + groups: + - ANSI x9.62 + hash: 102de1e9ccd7ccb19ddf8f27947634f6ead999f4344c4018e91e24443da727b9 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 11173359635892244526645658132322333093576027059470 + b: 5794761492476052092072402184247583199786607846699 + generator: + x: 4350083318528403460438013327944321433229925989835 + "y": 8364861175857685704614834024858954737098323264976 + form: + order: 5846006549323611672814737040186791886263374189321 + cofactor: 2 +- polyname: c2pnb176w1 names: - - Tweedledee -0e46d2ad2fc94b2c18e659ab7fe4913b9398bd7f45e59f11ff5189362d3f3ead: + - c2pnb176w1 + groups: + - ANSI x9.62 + hash: 26455973a32e381f58dfd08612cfcc0552353310e1e4b9d50539972a6d2cb38f + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 85642324140607507683375051114643593047076900650469643 + b: 35114443916449844294545951955033582194640857329631218 + generator: + x: 52787626678651478322959789876616160802918163729242008 + "y": 41770194124046651342451039039625169981713559962932780 + form: + order: 1464764815784035076424479112383122688505483765421 + cofactor: 65390 +- polyname: c2pnb208w1 names: - - JubJub -4c5d8d273f67af1994fe51a44f362b2baf706be2fffaf3dfbe8c8e2f7d65bcbf: + - c2pnb208w1 + groups: + - ANSI x9.62 + hash: 19b058dab4c26a69df289f44664cacb98b69481689c6f9d5b5b76be11b66b387 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 0 + b: 322000382208241327274923183779858171178051694881215049906753438 + generator: + x: 221744795206996450482987540464472569081701410202489539548783994 + "y": 24642064911367611040460456316041272335535900461343628052233699 + form: + order: 6319530221984476934661765632900719012846431750114578083741 + cofactor: 65096 +- polyname: c2pnb272w1 names: - - Pallas -cd73435dee1a73f60aeab90c77b028218118a0d0f32959ba763a07d1a70fcd0e: + - c2pnb272w1 + groups: + - ANSI x9.62 + hash: fe379ed2ccfd1c3284529a1d6ac1a5d97593be9f08efae7a7d926d900731c173 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 4316795096583271734038708287902743181939774412273767548044410258779043984801463072 + b: 3361668600857195844716332008130340170886904451128113749308190138987704636745793783 + generator: + x: 2876359957555285102530888505993453029764512130994259665685299064412762208772152717 + "y": 497374669994496288431220740045688697504576176996293512949629229244173385683868963 + form: + order: 116235492452543488393823301680748870034491124166583946466668991869818652235041 + cofactor: 65286 +- polyname: c2pnb304w1 names: - - Vesta -1243387d672156496457d8a6280ff957113c21969c0f100eca1212a2e4d938ed: + - c2pnb304w1 + groups: + - ANSI x9.62 + hash: aca25b3a148ddde5cbdf552612089aec0401496842f53c00f6300be3bc626a1a + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 32217300932117616200353401348142480094543640138900888501415281554269336123644510452423648897 + b: 24171696342544365087628953806113953157063000330846830142844828379479933394120827973349359806 + generator: + x: 3244054074276402616860251805761471981513125391074133305218906088469458445317263680695051796 + "y": 28725263310849389032429923141459276983521655696956627187517408750801012920655126719047581755 + form: + order: 500884825900595933307132795674658837818095809137913478977332553047879960661308247049501 + cofactor: 65070 +- polyname: c2pnb368w1 names: - - MDC201601 -1a3bab4c99b1dcde57c993be18335250230cfce780902c03ff9b1210d0b6ac38: + - c2pnb368w1 + groups: + - ANSI x9.62 + hash: cc37862e616aeecd7c4429a8ce7c976653232458646da27cdb0582c6fa3b2c8a + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 528008611511254755625542435671827661649298504721475774236227347754227872375326229256637496530572872916214145805 + b: 591998716689403411542243199239265004977205456949889085084985577409401751045981505592963736297337857050996507754 + generator: + x: 38804937928872028964249625155680565524392080985914806223254209127272151158552325195435938296282597192310680159 + "y": 289445894872738547386213393919188597703082810976887891959563304475234230394026396175882703634875349892402389776 + form: + order: 9194196556002283250851893699199753471497656173851998515361706855000304737080699826013007012009780734318951 + cofactor: 65392 +- polyname: c2tnb191v1 names: - - BADA55-R-256 -2fc8ed8862e668e596a1685884f451d02e5d1f66351c7f83e17f4724434170d3: + - c2tnb191v1 + groups: + - ANSI x9.62 + hash: 0ead2ff18f9f5d563e2d888597a47b7ffd304ff68796102ec65435f47bb42752 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 990598039569010512734789488960720925643983093641440813671 + b: 1134615152941088452485133098472963493214560786404446668268 + generator: + x: 1341302868033319476117680495850551079002781630514086390285 + "y": 2902154153197555334660691766205381066281922930339301300475 + form: + order: 1569275433846670190958947355803350458831205595451630533029 + cofactor: 2 +- polyname: c2tnb191v2 names: - - BADA55-VR-224 -071e5839db1fa40489416b54c97b6908636d20de2840e92fced7d17743ddb195: + - c2tnb191v2 + groups: + - ANSI x9.62 + hash: 10b1a2d58ad48ab62fa43a3f09609db19cca46c14276fa5f4c6939e48b71dc41 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 1570823069525253702994693608884191747308661736528008046360 + b: 150186265886833235036292851627975676141857315884353481217 + generator: + x: 1374044899684222797109114404744158368484997230304531037968 + "y": 570400948195239613452148817845246917221214333907184215690 + form: + order: 784637716923335095479473677925814481401065348266378101107 + cofactor: 4 +- polyname: c2tnb191v3 names: - - BADA55-VR-256 -2a875b2fa932a9197dbbe950f7e6fbe9855218d146e1f6c8ae97239964245c9e: + - c2tnb191v3 + groups: + - ANSI x9.62 + hash: 3fe2cc9a4051d9499b9ab994f7fe2d306f2df6669596bd91d229a51579954840 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 2648250798856296968662983812700313862849676378841102647243 + b: 2795090396487148255149641564379414408025141010062808913384 + generator: + x: 1357532472024458017350564529292556461389246483115450902237 + "y": 2068315654744679668775369744783026294549032207184431875774 + form: + order: 523091811282223396986315785270930752647646535584668335779 + cofactor: 6 +- polyname: c2tnb239v1 names: - - BADA55-VR-384 -703bb05443f43c2692f0d7c8934dbdce23c09fcbe76049316e9bf81214ebdd8f: + - c2tnb239v1 + groups: + - ANSI x9.62 + hash: 265d92ef795f90348b4f69f74d8e96c8cc6f84f59f05ad0cee9c2b85c236c723 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 345115155586281801504352628716882220639795329530580255431423529210915958 + b: 835220090183511522333759023255701946035554591371971415066075271323618326 + generator: + x: 604399942292681484344954722575621779974285614280181861075722134673877277 + "y": 675317841546748718168801678160111506702021297638836949018311255830651653 + form: + order: 220855883097298041197912187592864814557886993776713230936715041207411783 + cofactor: 4 +- polyname: c2tnb239v2 names: - - BADA55-VPR-224 -2345fd694393854a35f42b09e7eebb8d969ef898860372162f933a45026ef832: + - c2tnb239v2 + groups: + - ANSI x9.62 + hash: 17d15f5fd79e8cf47fa24e692e84c1fa5fad845891082b1bcafed32040b43ab9 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 456809490735107124967497208159924736451217252195844968366540790437307999 + b: 553647189540576539752324484531275027280692922701128769940876325020350283 + generator: + x: 282804817867150660669027280654207300465516395162898077627923475309830661 + "y": 596332462634149880734208119077987044193893980741358895833392139259004979 + form: + order: 147237255398198694131941458395243209523006695456232690299263349237764653 + cofactor: 6 +- polyname: c2tnb239v3 names: - - BADA55-VPR2-224 -022567b7dedd7a40bf6c3e134e8b5d768cc43b3e0b670fcbee0c949388c8577d: + - c2tnb239v3 + groups: + - ANSI x9.62 + hash: a925f1628f33cf9c242a748602eea48f7a43b9034950a9bd1930955a6d161100 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 7859609523723843909532993989998119673511302776769864123990101954292383 + b: 735577866927481491361633396386400994201974151971503584221245012969397568 + generator: + x: 779652361174847102218009081443196845541650113386566647107325176568519826 + "y": 319908273692670933265278635945337657283922173555277696347703723486213217 + form: + order: 88342353238919216479164875037145925622548965147075144322778604225055999 + cofactor: 10 +- polyname: c2tnb359v1 names: - - FourQ -37605fdde1e292ae0e9bfdf5d0338af088f0f312aae24d6d4f884873319febf3: + - c2tnb359v1 + groups: + - ANSI x9.62 + hash: 9b1228bc1e2ccc05621025531e95a15ce4130ca18f60268352523fae5833df87 + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 792669099770977123675122181800235235221795550907825637097321350892230598222100042144494098185538026356516183 + b: 334380845298260243536066243443522977322200436197311316831749741364919382672231752831927054698721330755475848 + generator: + x: 551785607344595016390301133291230792682154245730851847274561249850525225962385287096859651497762669928231063 + "y": 769177691662552475396266061747275903876548060882935134258334766784765110815616795800108156651827647566906557 + form: + order: 15450938044564692288746582873614059390629490453344209663962540632677447295745316740045672843724365195742523 + cofactor: 76 +- polyname: c2tnb431r1 names: - - Tom-256 -9450f51b2b390b32f4552a5cde0ba63b8723b4fa98f5e9686eff02a7f2c5898c: + - c2tnb431r1 + groups: + - ANSI x9.62 + hash: d4f243d3dd5549e530781c8c74150541993900d71109cfd3143c08659049860b + field: + type: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + basis: + params: + a: 1148480918809559523055937886236499413356744082963782054064637824932533583303246448309936000863113382392323095439709086942955490703 + b: 730009817878589157105698105019566508793654980277815234786385618476547478165875682356826528735875627658295798257985650015095170584 + generator: + x: 782478969896179451907345875551567227475273662518772996273713080867667434331926480316708135697094463033513974102949157822928840375 + "y": 1421650793886259027864735655775042553379405409847812805215591548893638620016302830612302464028401376240141679513358756501936355168 + form: + order: 550132875817621995948098052409342004650086721304725510946523726312246334661592590780763978563125341997711919748453208343530129 + cofactor: 10080 +- polyname: ed-254-mont names: - - Tom-384 -d2e82d6e3c27b8994e4c03ad0749ef128b351c3c0ecf149e8b6bfb9be0a6b18e: + - ed-254-mont + groups: + - NUMS + hash: d37d64051aa37ada876dbebe30b7ee1211942f0749381eb35dbb2c8009d6b447 + field: + type: + p: 28723632732102194046035667469577626311807405711506937402182952014414119698431 + bits: + params: + a: 28723632732102194046035667469577626311807405711506937402182952014414119698430 + d: 13947 + form: + order: 7180908183025548511508916867394406577924712274352752685057484164419229227207 + cofactor: 4 +- polyname: ed-255-mers names: - - Tom-521 -6a68f34abda418a9a227e2b422727f3c6fbc74a13bb8fa73bf5bdb0e5b771d70: + - ed-255-mers + groups: + - NUMS + hash: d24a5a6ab72290cfc8c921c8790f18872f3dfc50067b4927d71c32160e21806d + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564819203 + bits: + params: + a: 57896044618658097711785492504343953926634992332820282019728792003956564819202 + d: 60055 + form: + order: 14474011154664524427946373126085988481612150616673019099696943473275369352053 + cofactor: 4 +- polyname: ed-256-mont names: - - secp112r1 - - wap-wsg-idm-ecid-wtls6 -fecc0adf5d5e3cc6f3ae0b14a104e85c20bbe61a127e2c473a7ee8738171cf55: + - ed-256-mont + groups: + - NUMS + hash: 8e18e9b46c2ddd6741c4148102c1384b456b12a9c13d1edcace3e77426bcdd34 + field: + type: + p: 115636606695615697602567654828622531023877166082715509571142882662199379099647 + bits: + params: + a: 115636606695615697602567654828622531023877166082715509571142882662199379099646 + d: 13578 + form: + order: 28909151673903924400641913707155632755864722468680580292928189817299885915051 + cofactor: 4 +- polyname: ed-382-mont names: - - secp112r2 -a21b3870c5b1d5bcbd04de93c1a7462782aa2034b3f36cb98caae61393fea600: + - ed-382-mont + groups: + - NUMS + hash: 1aadf15f0f22933b859eb298dd11389202df5b326d9dc85f7cc34fd57967ee73 + field: + type: + p: 9847495414592669296538061489872013099874893943953759017552568018617869215322155954045933029003296406261776120807423 + bits: + params: + a: 9847495414592669296538061489872013099874893943953759017552568018617869215322155954045933029003296406261776120807422 + d: 717697 + form: + order: 2461873853648167324134515372468003274968723485988439754387041191942172767716325985379689814684721788810152581003873 + cofactor: 4 +- polyname: ed-383-mers names: - - secp128r1 -dfa2ff5b8f7f1e20844920274eb0b0608a3110851f9fe984556e808d135bd7c8: + - ed-383-mers + groups: + - NUMS + hash: 046a1d38ba560395d567df35d87d27e5dcac9407f3df2ee5db48a4c15e27515a + field: + type: + p: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995152987 + bits: + params: + a: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995152986 + d: 523990 + form: + order: 4925250774549309901534880012517951725634967408808180833493170465599421724340965185245636620539015930940268950833181 + cofactor: 4 +- polyname: ed-384-mont names: - - secp128r2 -fbad29c03b4a14cf2e7198fb5c31c35859e5b015d84cdccb37d8044dd338517d: + - ed-384-mont + groups: + - NUMS + hash: a3bb90c762460b664f72cede12d870a79f5b591930619567ae5abcd5ddf18cea + field: + type: + p: 27242793346725870392864805069239920482418413479970250235261124736529268568574243274298145027791523704776457633923071 + bits: + params: + a: 27242793346725870392864805069239920482418413479970250235261124736529268568574243274298145027791523704776457633923070 + d: 28439 + form: + order: 6810698336681467598216201267309980120604603369992562558815021907992753376144453070319091681243006554328101383456923 + cofactor: 4 +- polyname: ed-510-mont names: - - secp160k1 - - ansip160k1 -003e7831ee60845b40dfda78fe2900bd6cc4419e810998add09ca98264d5d6b7: + - ed-510-mont + groups: + - NUMS + hash: 3984a2cc428ae0f91c22c108fc2d24a34ee46b1f0772bb7f7a041aae61c36d07 + field: + type: + p: 3292621777717531703499517186296461297235914818063567795121505704883698582458552017893209304118318844074148143396809486426396407928092469737516832688963583 + bits: + params: + a: 3292621777717531703499517186296461297235914818063567795121505704883698582458552017893209304118318844074148143396809486426396407928092469737516832688963582 + d: 580126 + form: + order: 823155444429382925874879296574115324308978704515891948780376426220924645614619825060292619435898196135889513633653566522721211652581444493944302424904113 + cofactor: 4 +- polyname: ed-511-mers names: - - secp160r1 - - wap-wsg-idm-ecid-wtls7 - - ansip160r1 -469a0e7198626e9ceebfcfd68b586ac1df795c2a1ccefbf60fb0027ed2dbb49e: + - ed-511-mers + groups: + - NUMS + hash: 480065e0cccfdd2342593ff76842f7fa287fd99c7e5f80c24a736b8c47a27f62 + field: + type: + p: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503041567 + bits: + params: + a: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503041566 + d: 1097597 + form: + order: 1675975991242824637446753124775730765934920727574049172215445180465220503759183640666144208152597465679369002852461594360563651407035408075485491840167697 + cofactor: 4 +- polyname: ed-512-mont names: - - secp160r2 - - ansip160r2 -'08e978e7e211573d1399ebf16f31cde8c088e7da896686c5b2b04ad0bfb8355e': + - ed-512-mont + groups: + - NUMS + hash: 0fd4643f2d539cc46031ae054a01bc7230171602d6e0393435d438eaef8471a7 + field: + type: + p: 13307355755662784245937995239384449178495717617804446826996292939863313924196378526398893947208652243867464023067321551174658528251694711947109629815685119 + bits: + params: + a: 13307355755662784245937995239384449178495717617804446826996292939863313924196378526398893947208652243867464023067321551174658528251694711947109629815685118 + d: 76444 + form: + order: 3326838938915696061484498809846112294623929404451111706749073234965828481049071478543240479420514247228470430948546900219943149734576294085638217289020933 + cofactor: 4 +- polyname: gost256 names: - - secp192k1 - - ansip192k1 -0f4a066b38134af2e24008c7635a2cd12c603efe10e3b76b3eb153cfa884a5cd: + - gost256 + groups: + - GOST + hash: 41beeffcce857ea2f38bd17dac5d661a00f3c053945066cc39cf02966f4ad4da + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564821041 + bits: + params: + a: 7 + b: 43308876546767276905765904595650931995942111794451039583252968842033849580414 + generator: + x: 2 + "y": 4018974056539037503335449422937059775635739389905545080690979365213431566280 + form: + order: 57896044618658097711785492504343953927082934583725450622380973592137631069619 + cofactor: 1 +- polyname: gost512 names: - - secp224k1 - - ansip224k1 -df90185a5324bff196e97f3bc6dc2ed8e0796d527d7e982bbf93c0f4065be9aa: + - gost512 + groups: + - GOST + hash: 9e5b0a38893205dc72f63b4394a68533b7c208917564faa81b7e429306967c90 + field: + type: + p: 3623986102229003635907788753683874306021320925534678605086546150450856166624002482588482022271496854025090823603058735163734263822371964987228582907372403 + bits: + params: + a: 7 + b: 1518655069210828534508950034714043154928747527740206436194018823352809982443793732829756914785974674866041605397883677596626326413990136959047435811826396 + generator: + x: 1928356944067022849399309401243137598997786635459507974357075491307766592685835441065557681003184874819658004903212332884252335830250729527632383493573274 + "y": 2288728693371972859970012155529478416353562327329506180314497425931102860301572814141997072271708807066593850650334152381857347798885864807605098724013854 + form: + order: 3623986102229003635907788753683874306021320925534678605086546150450856166623969164898305032863068499961404079437936585455865192212970734808812618120619743 + cofactor: 1 +- polyname: id-GostR3410-2001-CryptoPro-A-ParamSet names: - - secp256k1 - - ansip256k1 -00f9f3dc94f2a4d8916e029aab69205de00e0ee1be768b5bc630375b98f2842d: + - id-GostR3410-2001-CryptoPro-A-ParamSet + groups: + - GOST + hash: 5cea75e796575904e282f3ef6363d9142c7f1ee42b4dc7d2f7a9b8fe6a5f4889 + field: + type: + p: 115792089237316195423570985008687907853269984665640564039457584007913129639319 + bits: + params: + a: 115792089237316195423570985008687907853269984665640564039457584007913129639316 + b: 166 + generator: + x: 1 + "y": 64033881142927202683649881450433473985931760268884941288852745803908878638612 + form: + order: 115792089237316195423570985008687907853073762908499243225378155805079068850323 + cofactor: 1 +- polyname: id-GostR3410-2001-CryptoPro-B-ParamSet names: - - sect113r1 - - wap-wsg-idm-ecid-wtls4 -ba259c79ac6c612375891d7dc3e5cb56e76a9a1b0c23743dcd1941aa574b20e7: + - id-GostR3410-2001-CryptoPro-B-ParamSet + groups: + - GOST + hash: a5fd42fa1737c8f50beb34305880433bf51ce2618427feebb3b4cb07b093e0c1 + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564823193 + bits: + params: + a: 57896044618658097711785492504343953926634992332820282019728792003956564823190 + b: 28091019353058090096996979000309560759124368558014865957655842872397301267595 + generator: + x: 1 + "y": 28792665814854611296992347458380284135028636778229113005756334730996303888124 + form: + order: 57896044618658097711785492504343953927102133160255826820068844496087732066703 + cofactor: 1 +- polyname: id-GostR3410-2001-CryptoPro-C-ParamSet names: - - sect113r2 -0d9de4e92523315e3ac1678f0c248298cd4d285fbe4920c0ad2b145b400ef87e: + - id-GostR3410-2001-CryptoPro-C-ParamSet + groups: + - GOST + hash: 0a3f7a91f743abce4e59a1ec706275f345ed450de850869d9d98693baf5d62b2 + field: + type: + p: 70390085352083305199547718019018437841079516630045180471284346843705633502619 + bits: + params: + a: 70390085352083305199547718019018437841079516630045180471284346843705633502616 + b: 32858 + generator: + x: 0 + "y": 29818893917731240733471273240314769927240550812383695689146495261604565990247 + form: + order: 70390085352083305199547718019018437840920882647164081035322601458352298396601 + cofactor: 1 +- polyname: id-tc26-gost-3410-12-512-paramSetA names: - - sect131r1 -793dab69fc8b68f30e6226f063e2f219c6c855195011bf39a20011e217c59558: + - id-tc26-gost-3410-12-512-paramSetA + groups: + - GOST + hash: 130c1d55ec6975f0f42a762df1f3a6a24305d861df47eb8e1c2957c1ffe28f0c + field: + type: + p: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083527 + bits: + params: + a: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083524 + b: 12190580024266230156189424758340094075514844064736231252208772337825397464478540423418981074322718899427039088997221609947354520590448683948135300824418144 + generator: + x: 3 + "y": 6128567132159368375550676650534153371826708807906353132296049546866464545472607119134529221703336921516405107369028606191097747738367571924466694236795556 + form: + order: 13407807929942597099574024998205846127479365820592393377723561443721764030073449232318290585817636498049628612556596899500625279906416653993875474742293109 + cofactor: 1 +- polyname: id-tc26-gost-3410-12-512-paramSetB names: - - sect131r2 -592b7b784cbe0f62285f645dda6174a098955c791403f82ad835589e10336f94: + - id-tc26-gost-3410-12-512-paramSetB + groups: + - GOST + hash: 5316dfb7e1317f9f9522fc64c71f8db0a36e16bc1a9b898c1d04ba81151f0bac + field: + type: + p: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042159 + bits: + params: + a: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042156 + b: 5472517130514047254760433071281657274171034389553769779747941603125796549693907036696237273952702637857580071293254240945079496484373854264998452887027990 + generator: + x: 2 + "y": 1391087797795557258711735874750463328666729297647553860794340434982072762491277963324668489993185089365703033494204180568181905548968011075910357787492797 + form: + order: 6703903964971298549787012499102923063739682910296196688861780721860882015036922585419853748190383615062910947743405567510148398820717100282856877776119229 + cofactor: 1 +- polyname: id-tc26-gost-3410-2012-256-paramSetA names: - - sect163r1 - - ansit163r1 -7bb87bc2c67ba9c3b28c486f3e55323ecc61c3601515c69607f9b507251d8f21: + - id-tc26-gost-3410-2012-256-paramSetA + groups: + - GOST + hash: e467aa0383646769e5f03cddc431be3fd23a86e9561ac4ab5a895204f8f02492 + field: + type: + p: 115792089237316195423570985008687907853269984665640564039457584007913129639319 + bits: + params: + a: 1 + d: 2724414110474605931834268501164757645998726878473076809432604223414351675387 + generator: + x: 13 + "y": 43779144989398987843428779166090436406934195821915183574454224403186176950503 + form: + order: 28948022309329048855892746252171976963338560298092253442512153408785530358887 + cofactor: 4 +- polyname: id-tc26-gost-3410-2012-512-paramSetC names: - - sect193r1 - - ansit193r1 -013ea2d717f16fd5f218abe23ca5ebb42d79cc484ade8c19e726bf8c0484b552: + - id-tc26-gost-3410-2012-512-paramSetC + groups: + - GOST + hash: 5563f8bd5276a5ce2425c5c81cca0bdf0ae210c3bbbc7954d55f4ef20b45e721 + field: + type: + p: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083527 + bits: + params: + a: 1 + d: 8291368582540391759956325599449696250171737838651241289585997940557058703682611983276933821315724273262456979490783602284025399599007870613061010570769744 + generator: + x: 18 + "y": 3697901750350036466195501370680965130892925445528794106515700685530527913038331015106382234398842797314774264061702328469726236276369898526828850803907133 + form: + order: 3351951982485649274893506249551461531869841455148098344430890360930441007518362115868300084349221274418848205850841645514717116281909345935543464929272813 + cofactor: 4 +- polyname: mnt1 names: - - sect193r2 - - ansit193r2 -53e89df949649eebbd8a61bcb2155a7dd5400c4c956b7ee93d603122be164f07: + - mnt1 + groups: + - Miyaji-Nakabayashi-Takano + hash: f97fb953b2e1e66a1e6de0318e85735284d7aa88b3e7d0565e6abaad9845cf06 + field: + type: + p: 908761003790427908077548955758380356675829026531247 + bits: + params: + a: 818416342594888291485044088811640789053085789975506 + b: 666070443323978349780035881803413282865714842057992 + generator: + x: 880160269147894469110091054219123598900751702635472 + "y": 133423712768349968172423365036481251038071627601277 + form: + order: 59252852825873893726123036315589781262054405453 + cofactor: 15337 +- polyname: mnt2_1 names: - - sect239k1 - - ansit239k1 -af0b27425f78cbc60df9948ea4c4036f09debb60ecd59caa70a2058e40d199b1: + - mnt2_1 + groups: + - Miyaji-Nakabayashi-Takano + hash: 646fcec40e7e8b1616a07fa18004d40dc567dd87a6e5d304bf4fa4b0cd07dc62 + field: + type: + p: 519518160144969382386592375449686021630483366071 + bits: + params: + a: 352938082819033451679859515217475787681700632697 + b: 408464775261012095248770468628212532331294877155 + generator: + x: 223491033209109410714592657297655800405163215000 + "y": 411298351227615414457474183551202213091451277571 + form: + order: 519518160144969382386592375449686021630483366069 + cofactor: 1 +- polyname: mnt2_2 names: - - wap-wsg-idm-ecid-wtls1 -1516c5a3fa3d9852d38193d52d6fa7b5725726a107240e977a091f4060dc8869: + - mnt2_2 + groups: + - Miyaji-Nakabayashi-Takano + hash: 93e11a128257c3bdb5fd75801c2b0f4287643f272e0d80794c32207f267c3a92 + field: + type: + p: 519518160144969382386592375449686021630483366071 + bits: + params: + a: 43945410257739111901787832459422251376950732067 + b: 375642380268472329525586805272738848671622732092 + generator: + x: 76864037938427797180505154695886131321774295529 + "y": 313310616992209589753781760082960874716169678932 + form: + order: 519518160144969382386592375449686021630483366069 + cofactor: 1 +- polyname: mnt3_1 names: - - wap-wsg-idm-ecid-wtls5 - - c2pnb163v1 -da7fa5870f6acc50a02c6361c88faec1ba79d824babf5b84ac86eba8a832793b: + - mnt3_1 + groups: + - Miyaji-Nakabayashi-Takano + hash: 93d8334b62085877d992d84b7b431bf852942056f695c6f0cce2f295920cc073 + field: + type: + p: 793549717144513671927050677226939834588042230471 + bits: + params: + a: 622324337578136504381458034756708570127320393428 + b: 679399464100262226896655582246785658280894339109 + generator: + x: 134196955940735932140054387094466097209379669897 + "y": 475032169075125695379476017197760474363545526068 + form: + order: 793549717144513671927050677226939834588042230469 + cofactor: 1 +- polyname: mnt3_2 names: - - wap-wsg-idm-ecid-wtls8 -6fb1e525b89d4005111b56d8093677457293712ce8ac4ca4cded6fdaa94f30ae: + - mnt3_2 + groups: + - Miyaji-Nakabayashi-Takano + hash: b6c8d03d17269473f6b306d451c264dbaa21a3604bde90e57bd219b0a4a41326 + field: + type: + p: 793549717144513671927050677226939834588042230471 + bits: + params: + a: 546591310324988457464941939010636402270744250852 + b: 364394206883325638309961292673757601513829500568 + generator: + x: 418499394613194594316268285225639275968218849255 + "y": 288039222580591611448120868598326194612886038001 + form: + order: 793549717144513671927050677226939834588042230469 + cofactor: 1 +- polyname: mnt3_3 names: - - wap-wsg-idm-ecid-wtls9 -af18cc7b378314a6010486b84290614b999e1274ef7a20b20997298b712a1ea1: + - mnt3_3 + groups: + - Miyaji-Nakabayashi-Takano + hash: e56dfbb980f7fc96ed9309436d4b0ac344f3289d9a03a079f10f5798f1875db5 + field: + type: + p: 793549717144513671927050677226939834588042230471 + bits: + params: + a: 261880758559334219511630969146231553296028884192 + b: 179858800017230155269192492622984485330656308058 + generator: + x: 362187537172858700519967734278746475919618241586 + "y": 423548676869028289103676927856957310082505337631 + form: + order: 793549717144513671927050677226939834588042230469 + cofactor: 1 +- polyname: mnt4 + names: + - mnt4 + groups: + - Miyaji-Nakabayashi-Takano + hash: 1d85b20a08ec01435eaa7806457be6bf8cf14e149d8457247c2497f157fa7c1b + field: + type: + p: 1124984654526861897351865205551134254199281270688380623265871195502307023 + bits: + params: + a: 523738180880771835660162811256090871091667719741590490057092246937760775 + b: 349158787253847890440108540837393914061111813161060326704728164625173850 + generator: + x: 899530135586442936414753538198789551238843495645750497749181501891109502 + "y": 798437030589511588105480249809576124776584704718096669524954857809281861 + form: + order: 1124984654526861897351865205551134254199281270688380623265871195502307021 + cofactor: 1 +- polyname: mnt5_1 + names: + - mnt5_1 + groups: + - Miyaji-Nakabayashi-Takano + hash: c1ea8221c2e2d9d8d14746680d74d5f38e78f51f65058289879cca2f34050164 + field: + type: + p: 1456268479172808959148733486940327264608218463421238003553122264354852871 + bits: + params: + a: 1444437102824332673776911780113269118709134834507936118648910664337785210 + b: 501197994855571366878673438082853282734850993024815181056656221474374505 + generator: + x: 203793022823343721306359164843853672108326221043639614113895914979487072 + "y": 635298893494378616202847694017380102906454077593371761062935060696136144 + form: + order: 1456268479172808959148733486940327264608218463421238003553122264354852869 + cofactor: 1 +- polyname: mnt5_2 + names: + - mnt5_2 + groups: + - Miyaji-Nakabayashi-Takano + hash: 50694affe2e4f3888ec5f57297a8c80bb2fcd555873240934a0b24789148da42 + field: + type: + p: 1456268479172808959148733486940327264608218463421238003553122264354852871 + bits: + params: + a: 267730481723261989065478404650446725717139397755432143896989247062448137 + b: 663909814206444312426563432080406905347499086310700763782366919493249715 + generator: + x: 158021744841971674786413737351289175574154193557119865006803934330640027 + "y": 392498939183384320623138903917941581767554240001787071573478531823360057 + form: + order: 1456268479172808959148733486940327264608218463421238003553122264354852869 + cofactor: 1 +- polyname: mnt5_3 + names: + - mnt5_3 + groups: + - Miyaji-Nakabayashi-Takano + hash: e71f5358ce52053f8fa5de3a088009f21eb27e928a3d351a1f22ff7b72294398 + field: + type: + p: 1456268479172808959148733486940327264608218463421238003553122264354852871 + bits: + params: + a: 474919780769287348647741659377079543364827814239068035668508435147903933 + b: 316613187179524899098494439584719695576551876159378690445672290098602622 + generator: + x: 1217763057578776364719478896882249614640143693038555108448209953026083771 + "y": 150590610315292483496229242117685941402819258784212842907169875562188546 + form: + order: 1456268479172808959148733486940327264608218463421238003553122264354852869 + cofactor: 1 +- polyname: numsp256d1 + names: + - numsp256d1 + groups: + - NUMS + hash: d2a0154db34f8dba89e4f5f396d807f0ab5faeab3112a5bee8aff0ce8dccf47d + field: + type: + p: 115792089237316195423570985008687907853269984665640564039457584007913129639747 + bits: + params: + a: 115792089237316195423570985008687907853269984665640564039457584007913129639744 + b: 152961 + generator: + x: 1 + "y": 47689137025440499102064566445393148142324295100498856285384491063806635895927 + form: + order: 115792089237316195423570985008687907853233080465625507841270369819257950283813 + cofactor: 1 +- polyname: numsp256t1 + names: + - numsp256t1 + groups: + - NUMS + hash: aa344e96c898bb840cb4077c60b95fd8c65a3cc1dfad23c2e787c411125ede81 + field: + type: + p: 115792089237316195423570985008687907853269984665640564039457584007913129639747 + bits: + params: + a: 115792089237316195423570985008687907853269984665640564039457584007913129639746 + d: 15342 + generator: + x: 13 + "y": 56558017671127616723941111350859963393592894419123286895630403139519716830650 + form: + order: 28948022309329048855892746252171976963230320855948034936185801359597441823917 + cofactor: 4 +- polyname: numsp384d1 + names: + - numsp384d1 + groups: + - NUMS + hash: ddb3c9907d41466ce45211e0c6f4f37e32b23781626d586258da9ffe55f7daa8 + field: + type: + p: 39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306499 + bits: + params: + a: 39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306496 + b: 39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990271931 + generator: + x: 2 + "y": 9330747455132509389369239544281476802372451096234459195690770838483525754227980774184384851366771875937717764648771 + form: + order: 39402006196394479212279040100143613805079739270465446667947266506191861115174655963485010977999089551199179622998457 + cofactor: 1 +- polyname: numsp384t1 + names: + - numsp384t1 + groups: + - NUMS + hash: 3e5db9b8cfeb42e588a3f11a97a7133900b8d283d4078d62bbf41709b6ce9e73 + field: + type: + p: 39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306499 + bits: + params: + a: 39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306498 + d: 333194 + generator: + x: 8 + "y": 17948339143669047664612126012973879979591312763233769368733595307773405597064936635500007964304847091513757983005678 + form: + order: 9850501549098619803069760025035903451269934817616361666986603623638432032256865558780541454083219163250604218936869 + cofactor: 4 +- polyname: numsp512d1 + names: + - numsp512d1 + groups: + - NUMS + hash: 7542f7dcc1bb4d260a01ec9b1ac32309149fb5006faec50c7e089142f2637bed + field: + type: + p: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083527 + bits: + params: + a: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083524 + b: 121243 + generator: + x: 2 + "y": 1474699786863197377635437552960403681298645566010448086821683528339907698920174289241136514196025058614111083947437197647254268802689419027664535447392040 + form: + order: 13407807929942597099574024998205846127479365820592393377723561443721764030073472452331350974860724328926419335846901075402352787783454420582463574377715037 + cofactor: 1 +- polyname: numsp512t1 + names: + - numsp512t1 + groups: + - NUMS + hash: 9e60d0a9f80a6e1b3ff4b501c930e33271ffcffa00b82c24c0fc5842806ec19b + field: + type: + p: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083527 + bits: + params: + a: 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006083526 + d: 637608 + generator: + x: 32 + "y": 6568039280320557258117350145617368920072822466947916448830706957758745259983052002739173895729555235630349489654220156690515577744406549243390353750039646 + form: + order: 3351951982485649274893506249551461531869841455148098344430890360930441007518346893020404367996870882777121262593078152830179243535023501253454245088133513 + cofactor: 4 +- polyname: prime192v2 names: - prime192v2 -2abad5549f6f25928c7a2e30f25b346227106ae123c739ef28d532ca69dba9bb: + groups: + - ANSI x9.62 + hash: 88c9d670865368221f89938a461a3b92156798bf28c3c8b9a530610e155cbadd + field: + type: + p: 6277101735386680763835789423207666416083908700390324961279 + bits: + params: + a: 6277101735386680763835789423207666416083908700390324961276 + b: 5005402392289390203552069470771117084861899307801456990547 + generator: + x: 5851329466723574623122023978072381191095567081251774399306 + "y": 2487701625881228691269808880535093938601070911264778280469 + form: + order: 6277101735386680763835789423078825936192100537584385056049 + cofactor: 1 +- polyname: prime192v3 names: - prime192v3 -84cd41322754f58d435aeff1d98118599fabadb1f1604c9cf90bba2499a9bb3e: + groups: + - ANSI x9.62 + hash: f1c275ea2052cdcbb9b73a5e52ffc3d4fdca7c98e75e6be78f12567babfeac87 + field: + type: + p: 6277101735386680763835789423207666416083908700390324961279 + bits: + params: + a: 6277101735386680763835789423207666416083908700390324961276 + b: 835424738382823911013350127192156429351504823785813797142 + generator: + x: 3068962813279260818967075386646565556597936748864191010966 + "y": 1389308651191334868712987806154897411485840735611413676976 + form: + order: 6277101735386680763835789423166314882687165660350679936019 + cofactor: 1 +- polyname: prime239v1 names: - prime239v1 -b0414b32a7f59470e2c57199b0256335e52ee0b6967cfc365e081fe53ecc0c18: + groups: + - ANSI x9.62 + hash: 9bdaa499e4e882c9d9accf875936d96e3d85e2086678be41391b15b49bd007fd + field: + type: + p: 883423532389192164791648750360308885314476597252960362792450860609699839 + bits: + params: + a: 883423532389192164791648750360308885314476597252960362792450860609699836 + b: 738525217406992417348596088038781724164860971797098971891240423363193866 + generator: + x: 110282003749548856476348533541186204577905061504881242240149511594420911 + "y": 869078407435509378747351873793058868500210384946040694651368759217025454 + form: + order: 883423532389192164791648750360308884807550341691627752275345424702807307 + cofactor: 1 +- polyname: prime239v2 names: - prime239v2 -77c9b1afa8825c31a37b1b7afccbab86baf6b2bd420beecc64a0463b17501381: + groups: + - ANSI x9.62 + hash: 282a9393ced5662c23fe6a40d6dfcd54f8e886b93e2506af86fcb6bc38d6fdba + field: + type: + p: 883423532389192164791648750360308885314476597252960362792450860609699839 + bits: + params: + a: 883423532389192164791648750360308885314476597252960362792450860609699836 + b: 672911360131302308487984934662800265942370984454769524007721579835502380 + generator: + x: 391216823383454382695699374968715597047546990656793544472819218431619303 + "y": 628089868206548595071356317553544393570683199925782012253471378783331514 + form: + order: 883423532389192164791648750360308886392687657546993855147765732451295331 + cofactor: 1 +- polyname: prime239v3 names: - prime239v3 -d46c14cd7eeeaebade68d3e264ff790c9b77ec9c90a74e16cec18f90a4b81580: + groups: + - ANSI x9.62 + hash: 392781363423596038913975a3c2a5624ddc5dbbeff03f3097bbd98c2e4ef6df + field: + type: + p: 883423532389192164791648750360308885314476597252960362792450860609699839 + bits: + params: + a: 883423532389192164791648750360308885314476597252960362792450860609699836 + b: 257710759664581349045614884019467140476383834471573891251575555059576126 + generator: + x: 713702090966717781398151179513032310291275673609168278295934709018913114 + "y": 152051417671827544218539107898347788360948341292488391005135896880966899 + form: + order: 883423532389192164791648750360308884771190369765922550517967171058034001 + cofactor: 1 +- polyname: secp112r1_wap-wsg-idm-ecid-wtls6 names: - - c2pnb176w1 -067b5f27470aabb4810fcf1510b99f3c3c64289005acf3639a45e098bb52e444: + - secp112r1 + - wap-wsg-idm-ecid-wtls6 + groups: + - SECG + - WTLS + hash: 6143b78c0c9811d70a6f3a17f7f2593afa237070330250b053b908ed77d09f3f + field: + type: + p: 4451685225093714772084598273548427 + bits: + params: + a: 4451685225093714772084598273548424 + b: 2061118396808653202902996166388514 + generator: + x: 188281465057972534892223778713752 + "y": 3419875491033170827167861896082688 + form: + order: 4451685225093714776491891542548933 + cofactor: 1 +- polyname: secp112r2 names: - - c2pnb163v2 -b2e362703bf8faffaab706ec749c18c6a0f7704159ca0d1d36f10f7618e1c86a: + - secp112r2 + groups: + - SECG + hash: 7bbddd303b1ed9968632857f57b34b564fd88eb50d4ac9141d57b8539d740563 + field: + type: + p: 4451685225093714772084598273548427 + bits: + params: + a: 1970543761890640310119143205433388 + b: 1660538572255285715897238774208265 + generator: + x: 1534098225527667214992304222930499 + "y": 3525120595527770847583704454622871 + form: + order: 1112921306273428674967732714786891 + cofactor: 4 +- polyname: secp128r1 names: - - c2pnb163v3 -a56380a2219c6e016c67c854a50c2ea8dc875b36bbf35dba7e301103a994d348: + - secp128r1 + groups: + - SECG + hash: e0b42d5b37a0fe4b6c7c8a6937fdc4ad87bef70f8117976c5cfa3c2a02f080b5 + field: + type: + p: 340282366762482138434845932244680310783 + bits: + params: + a: 340282366762482138434845932244680310780 + b: 308990863222245658030922601041482374867 + generator: + x: 29408993404948928992877151431649155974 + "y": 275621562871047521857442314737465260675 + form: + order: 340282366762482138443322565580356624661 + cofactor: 1 +- polyname: secp128r2 names: - - c2pnb208w1 -22bb2ae73741f129b9d18fd4eb9b01e18b4e6d38b7730c26e0d1e269777d8d2a: + - secp128r2 + groups: + - SECG + hash: 202d540ef0b3c8ea2bb6b9cb3c2b0cbd40d9be9d7e11599276e37828f7b0c605 + field: + type: + p: 340282366762482138434845932244680310783 + bits: + params: + a: 284470887156368047300405921324061011681 + b: 126188322377389722996253562430093625949 + generator: + x: 164048790688614013222215505581242564928 + "y": 52787839253935625605232456597451787076 + form: + order: 85070591690620534603955721926813660579 + cofactor: 4 +- polyname: sect113r1_wap-wsg-idm-ecid-wtls4 names: - - c2tnb191v3 -60893b56a00bde9e66d7f04425f7e99d2554b915ba45cd32b72b05450aa915eb: + - sect113r1 + - wap-wsg-idm-ecid-wtls4 + groups: + - SECG + - WTLS + hash: cddc7013caa6fd2659de1d76c4f25e38bfe4c1457e8e200765da30e6ccfb664d + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 984342157317881800509153672175863 + b: 4720643197658441292834747278018339 + generator: + x: 3193479700953970059711257944178959 + "y": 3349781614104721427986676261787782 + form: + order: 5192296858534827689835882578830703 + cofactor: 2 +- polyname: sect113r2 names: - - c2tnb191v2 -8ccdf5ae0e231c685a47479a60c4e1a39f1aa9724455c6cd0c0a5f6745b197ea: + - sect113r2 + groups: + - SECG + hash: e9b8ac67b4334db872575da6d66fc300d8fc7a827a4a1dc194080513d31edc62 + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 2121500201156255644417183296673223 + b: 3040591781815807764515357141309519 + generator: + x: 8548593233256193383924583779157911 + "y": 3644320092943472267836480028326429 + form: + order: 5192296858534827702972497909952403 + cofactor: 2 +- polyname: sect131r1 names: - - c2tnb191v1 -bbc0b258d86534251368866fcee4390493f05212d8aca26710639d017bbc39d3: + - sect131r1 + groups: + - SECG + hash: d03e59005a69b0cb69c935180b92823f2c4a7b4e239b7cc6c079534f26a399da + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 2596122663589129733642851280761649459384 + b: 712135644338826294893527440087695610689 + generator: + x: 172441231517205131123746450595941417881 + "y": 2568642209052024897328995836629039571280 + form: + order: 1361129467683753853893932755685365560653 + cofactor: 2 +- polyname: sect131r2 names: - - c2tnb239v3 -42680087f0850667d200b501156899253dc17e91b739745256f22e2c5dd2d755: + - sect131r2 + groups: + - SECG + hash: fee829263cb9fd3d9d64daf9af7612558adaa4e071c93648113dfe9882b3525c + field: + type: + bits: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + degree: + basis: + params: + a: 1326115398407399413153688921458524648370 + b: 1605906881731264989575575750236800229778 + generator: + x: 1136307413960044250856528209221675869864 + "y": 2138646989904939494838997255870994916367 + form: + order: 1361129467683753853879535043412812867983 + cofactor: 2 +- polyname: ssc-160 names: - - c2tnb239v2 -133105ff615d164fa7b9f3c3d718462f3861b11718cc221045eb9091413d4a6b: + - ssc-160 + groups: + - other + hash: 13a59484aec63524bd5474095729c6bb61187250b745e1418eed6f4046f2de57 + field: + type: + p: 1147860701762054730346201299935827782113538756127 + bits: + params: + a: 1147860701762054730346201299935827782113538756124 + b: 993193335754933797118314178888153828594854512705 + form: + order: 1147860701762054730346200648614608152209809891831 + cofactor: 1 +- polyname: ssc-192 names: - - c2tnb239v1 -34f8ce27527163ebef5b18b56b53b5f0e2bf3f1834ca1b7579a883893da87fea: + - ssc-192 + groups: + - other + hash: 87c208d7368876ea5f8fb184242cdc4bf82e16d276c519e2d26a8d367a89a1f1 + field: + type: + p: 4930024174431634640599033341057067222865862716297522433299 + bits: + params: + a: 4930024174431634640599033341057067222865862716297522433296 + b: 4265732895672588129268258440977714335632089762934383523494 + form: + order: 4930024174431634640599033341125441632693811654341940586403 + cofactor: 1 +- polyname: ssc-224 names: - - c2pnb272w1 -9c924fb815e3adaeeece90c21e73bbcee0c56bcf0106ba56b86ce880a6ed9a4b: + - ssc-224 + groups: + - other + hash: c1a6522c1eb0f264d23abe9516839f193eeb5baa5689ff1360507c486c16f86f + field: + type: + p: 21174292597673270169193562049053717791882423761323585056162680913631 + bits: + params: + a: 21174292597673270169193562049053717791882423761323585056162680913628 + b: 18321183280385145938884990414875229336370193019939570227257813318147 + form: + order: 21174292597673270169193562049053723134442099121024262551089688143309 + cofactor: 1 +- polyname: ssc-256 names: - - c2pnb304w1 -fdc29d01182f54cdbe566d2f5b39138de01da6daa4d7d330276777575e23d764: + - ssc-256 + groups: + - other + hash: 17c8f79583deff28f874038b798138bd0dd6bb2d279a681d0e380c4d45d5e9bf + field: + type: + p: 90942894222941581070058735694432465663348344332098107489693037779484723616779 + bits: + params: + a: 90942894222941581070058735694432465663348344332098107489693037779484723616776 + b: 78688883013276200091698248537162581920209762369847930022367595957783191893217 + form: + order: 90942894222941581070058735694432465663288414616171509431879910319924502217783 + cofactor: 1 +- polyname: ssc-288 names: - - c2pnb368w1 -fa9800f1595c14f05abc6f05bb78ccec7cd38e93c2542c1fde9bc0f78184c287: + - ssc-288 + groups: + - other + hash: 1f950ae36bf07b162ca57653077dee971a4da424ea7068f75362bd759fdefdf5 + field: + type: + p: 390596756491121423614434954606695289304724084762108334731724254341779347664665278286219 + bits: + params: + a: 390596756491121423614434954606695289304724084762108334731724254341779347664665278286216 + b: 337966179100791213208996178567593129982221810838428315939365373128820605838874928979766 + form: + order: 390596756491121423614434954606695289304724116479393090921502092797686514928150248753237 + cofactor: 1 +- polyname: ssc-320 names: - - c2tnb359v1 -3984719325df906182a390bea7e51d42c71ea140c5c75cb07028fb74797f9520: + - ssc-320 + groups: + - other + hash: 4af862cf65ddd8424a7a7b9333a2b54fc976bd71aae098deeaeed8c7573fc837 + field: + type: + p: 1677600295053042228788960243555000810201048522356787237681776606087928304667951345024875097229491 + bits: + params: + a: 1677600295053042228788960243555000810201048522356787237681776606087928304667951345024875097229488 + b: 1451553686391976948456801799936788618707919738968947956999929796583121697128874465400872041660580 + form: + order: 1677600295053042228788960243555000810201048522357873106251579120122685384485967275546948559607409 + cofactor: 1 +- polyname: ssc-384 names: - - c2tnb431r1 -60fd1b1c5667dc302994c4514c4e61428b10cb1ce25a54c65aa1147650eac63d: + - ssc-384 + groups: + - other + hash: 9ba55689a8b088c9e645c47db1d881e20a1d0d74cfc1297ba6d3409a4a44e19a + field: + type: + p: 30946263300823101954888425259784296108860594177929936231961025381527827855583154673559277957637088071546809309873019 + bits: + params: + a: 30946263300823101954888425259784296108860594177929936231961025381527827855583154673559277957637088071546809309873016 + b: 26776439362122453792588319552731959650141032425239760139617629033244994517401871440317035340712170298670944533378961 + form: + order: 30946263300823101954888425259784296108860594177929936231959195086011429040851460901626189237585847628753659044398489 + cofactor: 1 +- polyname: ssc-512 names: - - c2onb191v4 -b661b67c436ced5a00ff0847f603f29319491448d185abcf4093053de1a58725: + - ssc-512 + groups: + - other + hash: 2434ee01f40491526be4abae51430a20d80aa07650e783f9bdcd698ebe4b2d2d + field: + type: + p: 10530467723362659054861705371139847026313999328372313651398671272025951445569024729948471343061931586610942824229083371331823229156399790385588443550959087 + bits: + params: + a: 10530467723362659054861705371139847026313999328372313651398671272025951445569024729948471343061931586610942824229083371331823229156399790385588443550959084 + b: 9111550163858012281440901732746538838772262590143654133938674743542107885492015390851248618042056679983385207705625699101049041930943171450852516780927629 + form: + order: 10530467723362659054861705371139847026313999328372313651398671272025951445569144524507377363887941433449823713742916287342504795006316114468040283111710577 + cofactor: 1 +- polyname: w-254-mont names: - - c2onb191v5 -4b55a89d713ab4f0417272083edbd4ea862486a49356786e439ad733f1440d0b: + - w-254-mont + groups: + - NUMS + hash: df8478a743ae845c3b971f26ca3623b198110f40e17a9e24a97258c8c6b4a121 + field: + type: + p: 28723632732102194046035667469577626311807405711506937402182952014414119698431 + bits: + params: + a: 28723632732102194046035667469577626311807405711506937402182952014414119698428 + b: + raw: + form: + order: 28723632732102194046035667469577626311780164567688751013639069037248478312511 + cofactor: 1 +- polyname: w-255-mers names: - - c2onb239v4 -1f24cfff8a89eead0b85d328f9f14a63acaecbf358d207516292993d91033fd7: + - w-255-mers + groups: + - NUMS + hash: 377f5dfe187992eaff405629c605d58a88383293b1eb24d8ca486e4e41dba868 + field: + type: + p: 57896044618658097711785492504343953926634992332820282019728792003956564819203 + bits: + params: + a: 57896044618658097711785492504343953926634992332820282019728792003956564819200 + b: + raw: + form: + order: 57896044618658097711785492504343953926473211886304323019964499781607006751467 + cofactor: 1 +- polyname: w-256-mont names: - - c2onb239v5 + - w-256-mont + groups: + - NUMS + hash: 56e159bcab2d0b214e701f739300d32dae400b9d7b1f5e3fd30816261786ba74 + field: + type: + p: 115636606695615697602567654828622531023877166082715509571142882662199379099647 + bits: + params: + a: 115636606695615697602567654828622531023877166082715509571142882662199379099644 + b: 85610 + form: + order: 115636606695615697602567654828622531023872272121396628374428630485206652442603 + cofactor: 1 +- polyname: w-382-mont + names: + - w-382-mont + groups: + - NUMS + hash: 73a04b322b00ef991d641f3a0695c1a8a3252d789533bb2323dcd8002094fe10 + field: + type: + p: 9847495414592669296538061489872013099874893943953759017552568018617869215322155954045933029003296406261776120807423 + bits: + params: + a: 9847495414592669296538061489872013099874893943953759017552568018617869215322155954045933029003296406261776120807420 + b: + raw: + form: + order: 9847495414592669296538061489872013099874893943953759017550383744416438584990326265468648445809278578438674191167517 + cofactor: 1 +- polyname: w-383-mers + names: + - w-383-mers + groups: + - NUMS + hash: 584d7ec98b83099668c92c8657bddf17d829e28e780a48e40202cb139c4f6bed + field: + type: + p: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995152987 + bits: + params: + a: 19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995152984 + b: 97724 + form: + order: 19701003098197239606139520050071806902539869635232723333972032908904187686760616563249293103936710601848892201517983 + cofactor: 1 +- polyname: w-384-mont + names: + - w-384-mont + groups: + - NUMS + hash: fadfcd842e04d62aaa914e66ec3b33970c175cc19b9b37fbf7cc3ba85a83c048 + field: + type: + p: 27242793346725870392864805069239920482418413479970250235261124736529268568574243274298145027791523704776457633923071 + bits: + params: + a: 27242793346725870392864805069239920482418413479970250235261124736529268568574243274298145027791523704776457633923068 + b: 27798 + form: + order: 27242793346725870392864805069239920482418413479970250235259423235120778003919452809303293004597311350022776641089211 + cofactor: 1 +- polyname: w-510-mont + names: + - w-510-mont + groups: + - NUMS + hash: fc21c67d005504052220b378f0f1f05e6d7393c1c468fc7d1cf44d74ea983e7b + field: + type: + p: 3292621777717531703499517186296461297235914818063567795121505704883698582458552017893209304118318844074148143396809486426396407928092469737516832688963583 + bits: + params: + a: 3292621777717531703499517186296461297235914818063567795121505704883698582458552017893209304118318844074148143396809486426396407928092469737516832688963580 + b: 39053 + form: + order: 3292621777717531703499517186296461297235914818063567795121505704883698582458519939768840310852675452546945979507360215131777137033228919500490121733118509 + cofactor: 1 +- polyname: w-511-mers + names: + - w-511-mers + groups: + - NUMS + hash: 50792b2af2857c5d6ee26469bd9fa16e09603f2bfdd76e823028cb0e42de6873 + field: + type: + p: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503041567 + bits: + params: + a: 6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503041564 + b: 555482 + form: + order: 6703903964971298549787012499102923063739682910296196688861780721860882015036721809851437433650982323597912666986781878544290267505364471357287734177288607 + cofactor: 1 +- polyname: w-512-mont + names: + - w-512-mont + groups: + - NUMS + hash: dc1dd1396cb35b33f335975987d726ab48275c43db7e7ac44bac3fde01ede17d + field: + type: + p: 13307355755662784245937995239384449178495717617804446826996292939863313924196378526398893947208652243867464023067321551174658528251694711947109629815685119 + bits: + params: + a: 13307355755662784245937995239384449178495717617804446826996292939863313924196378526398893947208652243867464023067321551174658528251694711947109629815685116 + b: 99821 + form: + order: 13307355755662784245937995239384449178495717617804446826996292939863313924196307758082974641769030327747852853745543611664116465003691202021932955757772233 + cofactor: 1 +- polyname: wap-wsg-idm-ecid-wtls1 + names: + - wap-wsg-idm-ecid-wtls1 + groups: + - WTLS + hash: aee273909567dd7fa7fca8c1c5a909fdb6b5694f12224d90eaec15b9afdbad63 + field: + bits: + degree: + poly: + - power: + coeff: 1 + - power: + coeff: 1 + - power: + coeff: 1 + type: + basis: + params: + a: 1 + b: 1 + generator: + x: 7270726891776529038903590073665047 + "y": 4954873249839491011382670248365077 + form: + order: 5192296858534827627896703833467507 + cofactor: 2 +- polyname: wap-wsg-idm-ecid-wtls8 + names: + - wap-wsg-idm-ecid-wtls8 + groups: + - WTLS + hash: e11cf46611cfe3a0590de94c597b17748bc9c770117793378b205469cec18669 + field: + bits: + p: 5192296858534827628530496329219559 + type: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 5192296858534827767273836114360297 + cofactor: 1 +- polyname: wap-wsg-idm-ecid-wtls9 + names: + - wap-wsg-idm-ecid-wtls9 + groups: + - WTLS + hash: 5f5a1efecf84e73beeea4378317f996f568bb2819ad74c14706c98806c6d8f21 + field: + bits: + p: 1461501637330902918203684832716283019655932313743 + type: + params: + a: 0 + b: 3 + generator: + x: 1 + "y": 2 + form: + order: 1461501637330902918203687013445034429194588307251 + cofactor: 1 diff --git a/tasks/curves.rake b/tasks/curves.rake index 29adcb24..be09241c 100644 --- a/tasks/curves.rake +++ b/tasks/curves.rake @@ -39,17 +39,36 @@ task :curves do Integer(value) end end + [:params, :generator].map do |collection| + next unless result_hash[collection] + result_hash[collection] = result_hash[collection].transform_values do |value| + next value unless value.is_a? Hash + value[:raw] || value + end + end output_thing = deep_to_a(result_hash.deep_sort) mht = MerkleHashTree.new(output_thing, Digest::SHA256) curve_hash = mht.head.unpack1('H*') - output_data[curve_hash] ||= {} - output_data[curve_hash]['names'] ||= [] - output_data[curve_hash]['names'] << curve_name + output_data[curve_hash] ||= { + polyname: nil, + names: [], + groups: [], + hash: nil, + **result_hash.dup + } + output_data[curve_hash][:names] << curve_name + output_data[curve_hash][:groups] << curve_file['name'] end end - File.write(OUTPUT_FILE, output_data.to_yaml) + output_data = output_data.deep_stringify_keys.map do |k, v| + v['hash'] = k + v['polyname'] = v['names'].sort.join('_') + v + end + + File.write(OUTPUT_FILE, output_data.sort_by{|v| v['polyname']}.to_yaml) end