risc0-ed25519-verified/verification/CurveSig.llbc
mrwulf 87db0f7acf PHASE 2 COMPLETE ON RISC0: THE FULL POINT-LEVEL LIFT
(verify_accepts_iff_decompress, button-enforced)

Port of the dalek decompress chain to the risc0 fork (v4 gen):

- source patch 8b69091: decompress step_2 negate-then-conditional-assign
  (the documented sqrt_ratio_i rewrite; sqrt_ratio_i itself was already
  in the compatible shape); extract.sh: decompress un-opaqued,
  re-extracted - the step_1/step_2 external axioms vanish from the
  template, decompress is transparent.
- Proofs/DecompressSpec.lean: dalek port, instance rename
  Shared0FieldElement51 -> SharedAFieldElement51.
- Proofs/FromBytesSpec.lean: PORT DELTA - this gen's from_bytes takes
  RangeFrom subslices (bytes[k..]) into a local load8 CLOSURE with
  literal indices instead of dalek's named load8_at: new
  range_from_index_spec (over the step_simps-reduced slice index) +
  closure_call_spec (same disjoint-OR loader math); window/telescope
  arithmetic identical.
- Proofs/DecompressMain.lean: decompress_of_canonical (standard three)
  + verify_accepts_iff_decompress (corollary verbatim - this fork's
  point-equation signature is byte-identical to dalek's):

    accept  <=>  decompress(R) = [k]*(-A) + [s]*B   (as points).

check.sh: 4-tier Phase 3b; full-lift cone exactly [3 standard +
Signature + sha512_hash3 + to_bytes + Error + Error.new]. Full button
green fresh.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 01:29:22 +02:00

1 line
No EOL
334 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"charon_version":"0.1.212","translated":{"crate_name":"ed25519_dalek","options":{"ullbc":false,"precise_drops":false,"skip_borrowck":false,"mir":null,"rustc_args":[],"targets":[],"monomorphize":false,"monomorphize_mut":null,"start_from":["crate::verifying::verify_sha512","crate::verifying::recompute_r_sha512"],"start_from_if_exists":[],"start_from_attribute":null,"start_from_pub":false,"include":[],"opaque":["crate::verifying::sha512_hash3","crate::signature::compressed_from_bytes","curve25519_dalek","sha2","digest","ed25519","signature","subtle","zeroize","block_buffer","crypto_common"],"exclude":["generic_array","typenum"],"extract_opaque_bodies":false,"translate_all_methods":false,"duplicate_defaulted_methods":true,"lift_associated_types":["*"],"hide_marker_traits":true,"remove_adt_clauses":true,"hide_allocator":true,"remove_unused_self_clauses":true,"desugar_drops":false,"ops_to_function_calls":true,"index_to_function_calls":true,"treat_box_as_builtin":true,"raw_consts":false,"unsized_strings":false,"reconstruct_fallible_operations":true,"reconstruct_asserts":true,"unbind_item_vars":true,"print_original_ullbc":false,"print_ullbc":false,"print_built_llbc":false,"print_llbc":false,"dest_dir":null,"dest_file":"/home/oho/GitClone/Claude/FormalVerification/risc0-ed25519-verified/verification/CurveSig.llbc","no_dedup_serialized_ast":false,"format":null,"no_serialize":false,"no_typecheck":false,"no_normalize":false,"abort_on_error":false,"error_on_warnings":false,"preset":"Aeneas"},"target_information":[{"key":"x86_64-unknown-linux-gnu","value":{"target_pointer_size":8,"is_little_endian":true}}],"files":[{"id":0,"name":{"Local":"ed25519-dalek/src/verifying.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! ed25519 public keys.\n\nuse core::fmt::Debug;\nuse core::hash::{Hash, Hasher};\n\nuse curve25519_dalek::{\n digest::{generic_array::typenum::U64, Digest},\n edwards::{CompressedEdwardsY, EdwardsPoint},\n montgomery::MontgomeryPoint,\n scalar::Scalar,\n};\n\nuse ed25519::signature::Verifier;\n\nuse sha2::Sha512;\n\n#[cfg(feature = \"pkcs8\")]\nuse ed25519::pkcs8;\n\n#[cfg(feature = \"serde\")]\nuse serde::{Deserialize, Deserializer, Serialize, Serializer};\n\n#[cfg(feature = \"digest\")]\nuse crate::context::Context;\n#[cfg(feature = \"digest\")]\nuse signature::DigestVerifier;\n\nuse crate::{\n constants::PUBLIC_KEY_LENGTH,\n errors::{InternalError, SignatureError},\n hazmat::ExpandedSecretKey,\n signature::InternalSignature,\n signing::SigningKey,\n};\n\n/// An ed25519 public key.\n///\n/// # Note\n///\n/// The `Eq` and `Hash` impls here use the compressed Edwards y encoding, _not_ the algebraic\n/// representation. This means if this `VerifyingKey` is non-canonically encoded, it will be\n/// considered unequal to the other equivalent encoding, despite the two representing the same\n/// point. More encoding details can be found\n/// [here](https://hdevalence.ca/blog/2020-10-04-its-25519am).\n/// If you want to make sure that signatures produced with respect to those sorts of public keys\n/// are rejected, use [`VerifyingKey::verify_strict`].\n// Invariant: VerifyingKey.1 is always the decompression of VerifyingKey.0\n#[derive(Copy, Clone, Default, Eq)]\npub struct VerifyingKey {\n /// Serialized compressed Edwards-y point.\n pub(crate) compressed: CompressedEdwardsY,\n\n /// Decompressed Edwards point used for curve arithmetic operations.\n pub(crate) point: EdwardsPoint,\n}\n\nimpl Debug for VerifyingKey {\n fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(f, \"VerifyingKey({:?}), {:?})\", self.compressed, self.point)\n }\n}\n\nimpl AsRef<[u8]> for VerifyingKey {\n fn as_ref(&self) -> &[u8] {\n self.as_bytes()\n }\n}\n\nimpl Hash for VerifyingKey {\n fn hash<H: Hasher>(&self, state: &mut H) {\n self.as_bytes().hash(state);\n }\n}\n\nimpl PartialEq<VerifyingKey> for VerifyingKey {\n fn eq(&self, other: &VerifyingKey) -> bool {\n self.as_bytes() == other.as_bytes()\n }\n}\n\nimpl From<&ExpandedSecretKey> for VerifyingKey {\n /// Derive this public key from its corresponding `ExpandedSecretKey`.\n fn from(expanded_secret_key: &ExpandedSecretKey) -> VerifyingKey {\n VerifyingKey::from(EdwardsPoint::mul_base(&expanded_secret_key.scalar))\n }\n}\n\nimpl From<&SigningKey> for VerifyingKey {\n fn from(signing_key: &SigningKey) -> VerifyingKey {\n signing_key.verifying_key()\n }\n}\n\nimpl From<EdwardsPoint> for VerifyingKey {\n fn from(point: EdwardsPoint) -> VerifyingKey {\n VerifyingKey {\n point,\n compressed: point.compress(),\n }\n }\n}\n\nimpl VerifyingKey {\n /// Convert this public key to a byte array.\n #[inline]\n pub fn to_bytes(&self) -> [u8; PUBLIC_KEY_LENGTH] {\n self.compressed.to_bytes()\n }\n\n /// View this public key as a byte array.\n #[inline]\n pub fn as_bytes(&self) -> &[u8; PUBLIC_KEY_LENGTH] {\n &(self.compressed).0\n }\n\n /// Construct a `VerifyingKey` from a slice of bytes.\n ///\n /// # Warning\n ///\n /// The caller is responsible for ensuring that the bytes passed into this\n /// method actually represent a `curve25519_dalek::curve::CompressedEdwardsY`\n /// and that said compressed point is actually a point on the curve.\n ///\n /// # Example\n ///\n /// ```\n /// use ed25519_dalek::VerifyingKey;\n /// use ed25519_dalek::PUBLIC_KEY_LENGTH;\n /// use ed25519_dalek::SignatureError;\n ///\n /// # fn doctest() -> Result<VerifyingKey, SignatureError> {\n /// let public_key_bytes: [u8; PUBLIC_KEY_LENGTH] = [\n /// 215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58,\n /// 14, 225, 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26];\n ///\n /// let public_key = VerifyingKey::from_bytes(&public_key_bytes)?;\n /// #\n /// # Ok(public_key)\n /// # }\n /// #\n /// # fn main() {\n /// # doctest();\n /// # }\n /// ```\n ///\n /// # Returns\n ///\n /// A `Result` whose okay value is an EdDSA `VerifyingKey` or whose error value\n /// is a `SignatureError` describing the error that occurred.\n #[inline]\n pub fn from_bytes(bytes: &[u8; PUBLIC_KEY_LENGTH]) -> Result<VerifyingKey, SignatureError> {\n let compressed = CompressedEdwardsY(*bytes);\n let point = compressed\n .decompress()\n .ok_or(InternalError::PointDecompression)?;\n\n // Invariant: VerifyingKey.1 is always the decompression of VerifyingKey.0\n Ok(VerifyingKey { compressed, point })\n }\n\n /// Create a verifying context that can be used for Ed25519ph with\n /// [`DigestVerifier`].\n #[cfg(feature = \"digest\")]\n pub fn with_context<'k, 'v>(\n &'k self,\n context_value: &'v [u8],\n ) -> Result<Context<'k, 'v, Self>, SignatureError> {\n Context::new(self, context_value)\n }\n\n /// Returns whether this is a _weak_ public key, i.e., if this public key has low order.\n ///\n /// A weak public key can be used to generate a signature that's valid for almost every\n /// message. [`Self::verify_strict`] denies weak keys, but if you want to check for this\n /// property before verification, then use this method.\n pub fn is_weak(&self) -> bool {\n self.point.is_small_order()\n }\n\n // A helper function that computes `H(R || A || M)` where `H` is the 512-bit hash function\n // given by `CtxDigest` (this is SHA-512 in spec-compliant Ed25519). If `context.is_some()`,\n // this does the prehashed variant of the computation using its contents.\n #[allow(non_snake_case)]\n fn compute_challenge<CtxDigest>(\n context: Option<&[u8]>,\n R: &CompressedEdwardsY,\n A: &CompressedEdwardsY,\n M: &[u8],\n ) -> Scalar\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let mut h = CtxDigest::new();\n if let Some(c) = context {\n h.update(b\"SigEd25519 no Ed25519 collisions\");\n h.update([1]); // Ed25519ph\n h.update([c.len() as u8]);\n h.update(c);\n }\n h.update(R.as_bytes());\n h.update(A.as_bytes());\n h.update(M);\n\n Scalar::from_hash(h)\n }\n\n // Helper function for verification. Computes the _expected_ R component of the signature. The\n // caller compares this to the real R component. If `context.is_some()`, this does the\n // prehashed variant of the computation using its contents.\n // Note that this returns the compressed form of R and the caller does a byte comparison. This\n // means that all our verification functions do not accept non-canonically encoded R values.\n // See the validation criteria blog post for more details:\n // https://hdevalence.ca/blog/2020-10-04-its-25519am\n #[allow(non_snake_case)]\n fn recompute_R<CtxDigest>(\n &self,\n context: Option<&[u8]>,\n signature: &InternalSignature,\n M: &[u8],\n ) -> CompressedEdwardsY\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let k = Self::compute_challenge::<CtxDigest>(context, &signature.R, &self.compressed, M);\n let minus_A: EdwardsPoint = -self.point;\n // Recall the (non-batched) verification equation: -[k]A + [s]B = R\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &(minus_A), &signature.s).compress()\n }\n\n /// The ordinary non-batched Ed25519 verification check, rejecting non-canonical R values. (see\n /// [`Self::recompute_R`]). `CtxDigest` is the digest used to calculate the pseudorandomness\n /// needed for signing. According to the spec, `CtxDigest = Sha512`.\n ///\n /// This definition is loose in its parameters so that end-users of the `hazmat` module can\n /// change how the `ExpandedSecretKey` is calculated and which hash function to use.\n #[allow(non_snake_case)]\n pub(crate) fn raw_verify<CtxDigest>(\n &self,\n message: &[u8],\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let expected_R = self.recompute_R::<CtxDigest>(None, &signature, message);\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// The prehashed non-batched Ed25519 verification check, rejecting non-canonical R values.\n /// (see [`Self::recompute_R`]). `CtxDigest` is the digest used to calculate the\n /// pseudorandomness needed for signing. `MsgDigest` is the digest used to hash the signed\n /// message. According to the spec, `MsgDigest = CtxDigest = Sha512`.\n ///\n /// This definition is loose in its parameters so that end-users of the `hazmat` module can\n /// change how the `ExpandedSecretKey` is calculated and which hash function to use.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub(crate) fn raw_verify_prehashed<CtxDigest, MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n CtxDigest: Digest<OutputSize = U64>,\n MsgDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let ctx: &[u8] = context.unwrap_or(b\"\");\n debug_assert!(\n ctx.len() <= 255,\n \"The context must not be longer than 255 octets.\"\n );\n\n let message = prehashed_message.finalize();\n let expected_R = self.recompute_R::<CtxDigest>(Some(ctx), &signature, &message);\n\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Verify a `signature` on a `prehashed_message` using the Ed25519ph algorithm.\n ///\n /// # Inputs\n ///\n /// * `prehashed_message` is an instantiated hash digest with 512-bits of\n /// output which has had the message to be signed previously fed into its\n /// state.\n /// * `context` is an optional context string, up to 255 bytes inclusive,\n /// which may be used to provide additional domain separation. If not\n /// set, this will default to an empty string.\n /// * `signature` is a purported Ed25519ph signature on the `prehashed_message`.\n ///\n /// # Returns\n ///\n /// Returns `true` if the `signature` was a valid signature created by this\n /// [`SigningKey`] on the `prehashed_message`.\n ///\n /// # Note\n ///\n /// The RFC only permits SHA-512 to be used for prehashing, i.e., `MsgDigest = Sha512`. This\n /// function technically works, and is probably safe to use, with any secure hash function with\n /// 512-bit digests, but anything outside of SHA-512 is NOT specification-compliant. We expose\n /// [`crate::Sha512`] for user convenience.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub fn verify_prehashed<MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n MsgDigest: Digest<OutputSize = U64>,\n {\n self.raw_verify_prehashed::<Sha512, MsgDigest>(prehashed_message, context, signature)\n }\n\n /// Strictly verify a signature on a message with this keypair's public key.\n ///\n /// # On The (Multiple) Sources of Malleability in Ed25519 Signatures\n ///\n /// This version of verification is technically non-RFC8032 compliant. The\n /// following explains why.\n ///\n /// 1. Scalar Malleability\n ///\n /// The authors of the RFC explicitly stated that verification of an ed25519\n /// signature must fail if the scalar `s` is not properly reduced mod $\\ell$:\n ///\n /// > To verify a signature on a message M using public key A, with F\n /// > being 0 for Ed25519ctx, 1 for Ed25519ph, and if Ed25519ctx or\n /// > Ed25519ph is being used, C being the context, first split the\n /// > signature into two 32-octet halves. Decode the first half as a\n /// > point R, and the second half as an integer S, in the range\n /// > 0 <= s < L. Decode the public key A as point A'. If any of the\n /// > decodings fail (including S being out of range), the signature is\n /// > invalid.)\n ///\n /// All `verify_*()` functions within ed25519-dalek perform this check.\n ///\n /// 2. Point malleability\n ///\n /// The authors of the RFC added in a malleability check to step #3 in\n /// §5.1.7, for small torsion components in the `R` value of the signature,\n /// *which is not strictly required*, as they state:\n ///\n /// > Check the group equation \\[8\\]\\[S\\]B = \\[8\\]R + \\[8\\]\\[k\\]A'. It's\n /// > sufficient, but not required, to instead check \\[S\\]B = R + \\[k\\]A'.\n ///\n /// # History of Malleability Checks\n ///\n /// As originally defined (cf. the \"Malleability\" section in the README of\n /// this repo), ed25519 signatures didn't consider *any* form of\n /// malleability to be an issue. Later the scalar malleability was\n /// considered important. Still later, particularly with interests in\n /// cryptocurrency design and in unique identities (e.g. for Signal users,\n /// Tor onion services, etc.), the group element malleability became a\n /// concern.\n ///\n /// However, libraries had already been created to conform to the original\n /// definition. One well-used library in particular even implemented the\n /// group element malleability check, *but only for batch verification*!\n /// Which meant that even using the same library, a single signature could\n /// verify fine individually, but suddenly, when verifying it with a bunch\n /// of other signatures, the whole batch would fail!\n ///\n /// # \"Strict\" Verification\n ///\n /// This method performs *both* of the above signature malleability checks.\n ///\n /// It must be done as a separate method because one doesn't simply get to\n /// change the definition of a cryptographic primitive ten years\n /// after-the-fact with zero consideration for backwards compatibility in\n /// hardware and protocols which have it already have the older definition\n /// baked in.\n ///\n /// # Return\n ///\n /// Returns `Ok(())` if the signature is valid, and `Err` otherwise.\n #[allow(non_snake_case)]\n pub fn verify_strict(\n &self,\n message: &[u8],\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n let signature = InternalSignature::try_from(signature)?;\n\n let signature_R = signature\n .R\n .decompress()\n .ok_or_else(|| SignatureError::from(InternalError::Verify))?;\n\n // Logical OR is fine here as we're not trying to be constant time.\n if signature_R.is_small_order() || self.point.is_small_order() {\n return Err(InternalError::Verify.into());\n }\n\n let expected_R = self.recompute_R::<Sha512>(None, &signature, message);\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Verify a `signature` on a `prehashed_message` using the Ed25519ph algorithm,\n /// using strict signture checking as defined by [`Self::verify_strict`].\n ///\n /// # Inputs\n ///\n /// * `prehashed_message` is an instantiated hash digest with 512-bits of\n /// output which has had the message to be signed previously fed into its\n /// state.\n /// * `context` is an optional context string, up to 255 bytes inclusive,\n /// which may be used to provide additional domain separation. If not\n /// set, this will default to an empty string.\n /// * `signature` is a purported Ed25519ph signature on the `prehashed_message`.\n ///\n /// # Returns\n ///\n /// Returns `true` if the `signature` was a valid signature created by this\n /// [`SigningKey`] on the `prehashed_message`.\n ///\n /// # Note\n ///\n /// The RFC only permits SHA-512 to be used for prehashing, i.e., `MsgDigest = Sha512`. This\n /// function technically works, and is probably safe to use, with any secure hash function with\n /// 512-bit digests, but anything outside of SHA-512 is NOT specification-compliant. We expose\n /// [`crate::Sha512`] for user convenience.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub fn verify_prehashed_strict<MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n MsgDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let ctx: &[u8] = context.unwrap_or(b\"\");\n debug_assert!(\n ctx.len() <= 255,\n \"The context must not be longer than 255 octets.\"\n );\n\n let signature_R = signature\n .R\n .decompress()\n .ok_or_else(|| SignatureError::from(InternalError::Verify))?;\n\n // Logical OR is fine here as we're not trying to be constant time.\n if signature_R.is_small_order() || self.point.is_small_order() {\n return Err(InternalError::Verify.into());\n }\n\n let message = prehashed_message.finalize();\n let expected_R = self.recompute_R::<Sha512>(Some(ctx), &signature, &message);\n\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Convert this verifying key into Montgomery form.\n ///\n /// This can be used for performing X25519 Diffie-Hellman using Ed25519 keys. The output of\n /// this function is a valid X25519 public key whose secret key is `sk.to_scalar_bytes()`,\n /// where `sk` is a valid signing key for this `VerifyingKey`.\n ///\n /// # Note\n ///\n /// We do NOT recommend this usage of a signing/verifying key. Signing keys are usually\n /// long-term keys, while keys used for key exchange should rather be ephemeral. If you can\n /// help it, use a separate key for encryption.\n ///\n /// For more information on the security of systems which use the same keys for both signing\n /// and Diffie-Hellman, see the paper\n /// [On using the same key pair for Ed25519 and an X25519 based KEM](https://eprint.iacr.org/2021/509).\n pub fn to_montgomery(&self) -> MontgomeryPoint {\n self.point.to_montgomery()\n }\n\n /// Return this verifying key in Edwards form.\n pub fn to_edwards(&self) -> EdwardsPoint {\n self.point\n }\n}\n\nimpl Verifier<ed25519::Signature> for VerifyingKey {\n /// Verify a signature on a message with this keypair's public key.\n ///\n /// # Return\n ///\n /// Returns `Ok(())` if the signature is valid, and `Err` otherwise.\n fn verify(&self, message: &[u8], signature: &ed25519::Signature) -> Result<(), SignatureError> {\n self.raw_verify::<Sha512>(message, signature)\n }\n}\n\n/// Equivalent to [`VerifyingKey::verify_prehashed`] with `context` set to [`None`].\n#[cfg(feature = \"digest\")]\nimpl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for VerifyingKey\nwhere\n MsgDigest: Digest<OutputSize = U64>,\n{\n fn verify_digest(\n &self,\n msg_digest: MsgDigest,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n self.verify_prehashed(msg_digest, None, signature)\n }\n}\n\n/// Equivalent to [`VerifyingKey::verify_prehashed`] with `context` set to [`Some`]\n/// containing `self.value()`.\n#[cfg(feature = \"digest\")]\nimpl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for Context<'_, '_, VerifyingKey>\nwhere\n MsgDigest: Digest<OutputSize = U64>,\n{\n fn verify_digest(\n &self,\n msg_digest: MsgDigest,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n self.key()\n .verify_prehashed(msg_digest, Some(self.value()), signature)\n }\n}\n\nimpl TryFrom<&[u8]> for VerifyingKey {\n type Error = SignatureError;\n\n #[inline]\n fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {\n let bytes = bytes.try_into().map_err(|_| InternalError::BytesLength {\n name: \"VerifyingKey\",\n length: PUBLIC_KEY_LENGTH,\n })?;\n Self::from_bytes(bytes)\n }\n}\n\nimpl From<VerifyingKey> for EdwardsPoint {\n fn from(vk: VerifyingKey) -> EdwardsPoint {\n vk.point\n }\n}\n\n#[cfg(all(feature = \"alloc\", feature = \"pkcs8\"))]\nimpl pkcs8::EncodePublicKey for VerifyingKey {\n fn to_public_key_der(&self) -> pkcs8::spki::Result<pkcs8::Document> {\n pkcs8::PublicKeyBytes::from(self).to_public_key_der()\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<pkcs8::PublicKeyBytes> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(pkcs8_key: pkcs8::PublicKeyBytes) -> pkcs8::spki::Result<Self> {\n VerifyingKey::try_from(&pkcs8_key)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<&pkcs8::PublicKeyBytes> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(pkcs8_key: &pkcs8::PublicKeyBytes) -> pkcs8::spki::Result<Self> {\n VerifyingKey::from_bytes(pkcs8_key.as_ref()).map_err(|_| pkcs8::spki::Error::KeyMalformed)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl From<VerifyingKey> for pkcs8::PublicKeyBytes {\n fn from(verifying_key: VerifyingKey) -> pkcs8::PublicKeyBytes {\n pkcs8::PublicKeyBytes::from(&verifying_key)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl From<&VerifyingKey> for pkcs8::PublicKeyBytes {\n fn from(verifying_key: &VerifyingKey) -> pkcs8::PublicKeyBytes {\n pkcs8::PublicKeyBytes(verifying_key.to_bytes())\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<pkcs8::spki::SubjectPublicKeyInfoRef<'_>> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(public_key: pkcs8::spki::SubjectPublicKeyInfoRef<'_>) -> pkcs8::spki::Result<Self> {\n pkcs8::PublicKeyBytes::try_from(public_key)?.try_into()\n }\n}\n\n#[cfg(feature = \"serde\")]\nimpl Serialize for VerifyingKey {\n fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n where\n S: Serializer,\n {\n serializer.serialize_bytes(&self.as_bytes()[..])\n }\n}\n\n#[cfg(feature = \"serde\")]\nimpl<'d> Deserialize<'d> for VerifyingKey {\n fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n where\n D: Deserializer<'d>,\n {\n struct VerifyingKeyVisitor;\n\n impl<'de> serde::de::Visitor<'de> for VerifyingKeyVisitor {\n type Value = VerifyingKey;\n\n fn expecting(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(formatter, concat!(\"An ed25519 verifying (public) key\"))\n }\n\n fn visit_bytes<E: serde::de::Error>(self, bytes: &[u8]) -> Result<Self::Value, E> {\n VerifyingKey::try_from(bytes).map_err(E::custom)\n }\n\n fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>\n where\n A: serde::de::SeqAccess<'de>,\n {\n let mut bytes = [0u8; 32];\n\n #[allow(clippy::needless_range_loop)]\n for i in 0..32 {\n bytes[i] = seq\n .next_element()?\n .ok_or_else(|| serde::de::Error::invalid_length(i, &\"expected 32 bytes\"))?;\n }\n\n let remaining = (0..)\n .map(|_| seq.next_element::<u8>())\n .take_while(|el| matches!(el, Ok(Some(_))))\n .count();\n\n if remaining > 0 {\n return Err(serde::de::Error::invalid_length(\n 32 + remaining,\n &\"expected 32 bytes\",\n ));\n }\n\n VerifyingKey::try_from(&bytes[..]).map_err(serde::de::Error::custom)\n }\n }\n\n deserializer.deserialize_bytes(VerifyingKeyVisitor)\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AENEAS-COMPAT (formal verification): monomorphic SHA-512 verification path.\n//\n// `raw_verify::<CtxDigest>`'s generic `Digest<OutputSize = U64>` bound drags\n// the typenum/hybrid-array type-level machinery through the extractor, which\n// cannot translate it (mixed type/function recursion groups). The functions\n// below are the EXACT unrolling of `raw_verify::<Sha512>` with\n// `prehash_ctx = None` and a single message slice — the path the `Verifier`\n// impl takes — with the digest fixed to the concrete `Sha512` type and every\n// digest-trait call isolated behind a monomorphic wrapper (extracted opaque,\n// so no generic signature ever reaches the translator):\n// sha512_new/sha512_update/sha512_finalize_bytes = Digest::new/update/\n// finalize∘into at D = Sha512\n// Scalar::from_hash(h) = Scalar::from_bytes_mod_order_wide(&finalize(h))\n// (from_hash's definition, unrolled)\n// Semantics identical; pure refactor for extraction only.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/// AENEAS-COMPAT: the whole three-part hash as ONE monomorphic call whose\n/// signature carries no foreign types (this fork's sha2-0.10 `Sha512` type\n/// alias cannot be declared opaque by the extractor). Semantically:\n/// `Sha512::new().chain(r).chain(a).chain(m).finalize()`.\npub(crate) fn sha512_hash3(r: &[u8], a: &[u8], m: &[u8]) -> [u8; 64] {\n let mut h: Sha512 = Digest::new();\n Digest::update(&mut h, r);\n Digest::update(&mut h, a);\n Digest::update(&mut h, m);\n Digest::finalize(h).into()\n}\n\n#[allow(non_snake_case)]\npub(crate) fn recompute_r_sha512(\n key: &VerifyingKey,\n sig: &InternalSignature,\n message: &[u8],\n) -> CompressedEdwardsY {\n let k = Scalar::from_bytes_mod_order_wide(&sha512_hash3(\n sig.R.as_bytes(),\n key.compressed.as_bytes(),\n message,\n ));\n\n let minus_A: EdwardsPoint = -key.point;\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &minus_A, &sig.s).compress()\n}\n\n#[allow(non_snake_case)]\npub(crate) fn verify_sha512(\n key: &VerifyingKey,\n message: &[u8],\n sig: &ed25519::Signature,\n) -> Result<(), SignatureError> {\n // (parameter named `sig`, not `signature`: the extractor's generated\n // code would otherwise shadow the `signature::` crate namespace)\n let sig = InternalSignature::try_from(sig)?;\n let expected_R = recompute_r_sha512(key, &sig, message);\n // AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes\n // through machinery the extractor cannot interpret). Semantics identical\n // to `expected_R == signature.R`.\n let e = expected_R.as_bytes();\n let r = sig.R.as_bytes();\n let mut equal = true;\n let mut i = 0;\n while i < 32 {\n if e[i] != r[i] {\n equal = false;\n }\n i += 1;\n }\n if equal {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n}\n"},{"id":1,"name":{"Local":"ed25519-dalek/src/lib.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! A Rust implementation of ed25519 key generation, signing, and verification.\n//!\n//! # Example\n//!\n//! Creating an ed25519 signature on a message is simple.\n//!\n//! First, we need to generate a `SigningKey`, which includes both public and\n//! secret halves of an asymmetric key. To do so, we need a cryptographically\n//! secure pseudorandom number generator (CSPRNG). For this example, we'll use\n//! the operating system's builtin PRNG:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! // $ cargo add ed25519_dalek --features rand_core\n//! use rand::rngs::OsRng;\n//! use ed25519_dalek::SigningKey;\n//! use ed25519_dalek::Signature;\n//!\n//! let mut csprng = OsRng;\n//! let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # }\n//! ```\n//!\n//! We can now use this `signing_key` to sign a message:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::SigningKey;\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! use ed25519_dalek::{Signature, Signer};\n//! let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! let signature: Signature = signing_key.sign(message);\n//! # }\n//! ```\n//!\n//! As well as to verify that this is, indeed, a valid signature on\n//! that `message`:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! use ed25519_dalek::Verifier;\n//! assert!(signing_key.verify(message, &signature).is_ok());\n//! # }\n//! ```\n//!\n//! Anyone else, given the `public` half of the `signing_key` can also easily\n//! verify this signature:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::SigningKey;\n//! # use ed25519_dalek::Signature;\n//! # use ed25519_dalek::Signer;\n//! use ed25519_dalek::{VerifyingKey, Verifier};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//!\n//! let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! assert!(verifying_key.verify(message, &signature).is_ok());\n//! # }\n//! ```\n//!\n//! ## Serialisation\n//!\n//! `VerifyingKey`s, `SecretKey`s, `SigningKey`s, and `Signature`s can be serialised\n//! into byte-arrays by calling `.to_bytes()`. It's perfectly acceptable and\n//! safe to transfer and/or store those bytes. (Of course, never transfer your\n//! secret key to anyone else, since they will only need the public key to\n//! verify your signatures!)\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, VerifyingKey};\n//! use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//!\n//! let verifying_key_bytes: [u8; PUBLIC_KEY_LENGTH] = signing_key.verifying_key().to_bytes();\n//! let secret_key_bytes: [u8; SECRET_KEY_LENGTH] = signing_key.to_bytes();\n//! let signing_key_bytes: [u8; KEYPAIR_LENGTH] = signing_key.to_keypair_bytes();\n//! let signature_bytes: [u8; SIGNATURE_LENGTH] = signature.to_bytes();\n//! # }\n//! ```\n//!\n//! And similarly, decoded from bytes with `::from_bytes()`:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # use core::convert::{TryFrom, TryInto};\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, VerifyingKey, SecretKey, SignatureError};\n//! # use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};\n//! # fn do_test() -> Result<(SigningKey, VerifyingKey, Signature), SignatureError> {\n//! # let mut csprng = OsRng;\n//! # let signing_key_orig: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature_orig: Signature = signing_key_orig.sign(message);\n//! # let verifying_key_bytes: [u8; PUBLIC_KEY_LENGTH] = signing_key_orig.verifying_key().to_bytes();\n//! # let signing_key_bytes: [u8; SECRET_KEY_LENGTH] = signing_key_orig.to_bytes();\n//! # let signature_bytes: [u8; SIGNATURE_LENGTH] = signature_orig.to_bytes();\n//! #\n//! let verifying_key: VerifyingKey = VerifyingKey::from_bytes(&verifying_key_bytes)?;\n//! let signing_key: SigningKey = SigningKey::from_bytes(&signing_key_bytes);\n//! let signature: Signature = Signature::try_from(&signature_bytes[..])?;\n//! #\n//! # Ok((signing_key, verifying_key, signature))\n//! # }\n//! # fn main() {\n//! # do_test();\n//! # }\n//! ```\n//!\n//! ### PKCS#8 Key Encoding\n//!\n//! PKCS#8 is a private key format with support for multiple algorithms.\n//! It can be encoded as binary (DER) or text (PEM).\n//!\n//! You can recognize PEM-encoded PKCS#8 keys by the following:\n//!\n//! ```text\n//! -----BEGIN PRIVATE KEY-----\n//! ```\n//!\n//! To use PKCS#8, you need to enable the `pkcs8` crate feature.\n//!\n//! The following traits can be used to decode/encode [`SigningKey`] and\n//! [`VerifyingKey`] as PKCS#8. Note that [`pkcs8`] is re-exported from the\n//! toplevel of the crate:\n//!\n//! - [`pkcs8::DecodePrivateKey`]: decode private keys from PKCS#8\n//! - [`pkcs8::EncodePrivateKey`]: encode private keys to PKCS#8\n//! - [`pkcs8::DecodePublicKey`]: decode public keys from PKCS#8\n//! - [`pkcs8::EncodePublicKey`]: encode public keys to PKCS#8\n//!\n//! #### Example\n//!\n//! NOTE: this requires the `pem` crate feature.\n//!\n#![cfg_attr(feature = \"pem\", doc = \"```\")]\n#![cfg_attr(not(feature = \"pem\"), doc = \"```ignore\")]\n//! use ed25519_dalek::{VerifyingKey, pkcs8::DecodePublicKey};\n//!\n//! let pem = \"-----BEGIN PUBLIC KEY-----\n//! MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=\n//! -----END PUBLIC KEY-----\";\n//!\n//! let verifying_key = VerifyingKey::from_public_key_pem(pem)\n//! .expect(\"invalid public key PEM\");\n//! ```\n//!\n//! ### Using Serde\n//!\n//! If you prefer the bytes to be wrapped in another serialisation format, all\n//! types additionally come with built-in [serde](https://serde.rs) support by\n//! building `ed25519-dalek` via:\n//!\n//! ```bash\n//! $ cargo build --features=\"serde\"\n//! ```\n//!\n//! They can be then serialised into any of the wire formats which serde supports.\n//! For example, using [bincode](https://github.com/TyOverby/bincode):\n//!\n#![cfg_attr(all(feature = \"rand_core\", feature = \"serde\"), doc = \"```\")]\n#![cfg_attr(not(all(feature = \"rand_core\", feature = \"serde\")), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! use bincode::serialize;\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! # let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! # let verified: bool = verifying_key.verify(message, &signature).is_ok();\n//!\n//! let encoded_verifying_key: Vec<u8> = serialize(&verifying_key).unwrap();\n//! let encoded_signature: Vec<u8> = serialize(&signature).unwrap();\n//! # }\n//! ```\n//!\n//! After sending the `encoded_verifying_key` and `encoded_signature`, the\n//! recipient may deserialise them and verify:\n//!\n#![cfg_attr(all(feature = \"rand_core\", feature = \"serde\"), doc = \"```\")]\n#![cfg_attr(not(all(feature = \"rand_core\", feature = \"serde\")), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! # use bincode::serialize;\n//! use bincode::deserialize;\n//!\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! # let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! # let verified: bool = verifying_key.verify(message, &signature).is_ok();\n//! # let encoded_verifying_key: Vec<u8> = serialize(&verifying_key).unwrap();\n//! # let encoded_signature: Vec<u8> = serialize(&signature).unwrap();\n//! let decoded_verifying_key: VerifyingKey = deserialize(&encoded_verifying_key).unwrap();\n//! let decoded_signature: Signature = deserialize(&encoded_signature).unwrap();\n//!\n//! # assert_eq!(verifying_key, decoded_verifying_key);\n//! # assert_eq!(signature, decoded_signature);\n//! #\n//! let verified: bool = decoded_verifying_key.verify(&message, &decoded_signature).is_ok();\n//!\n//! assert!(verified);\n//! # }\n//! ```\n\n#![no_std]\n#![warn(future_incompatible, rust_2018_idioms)]\n#![deny(missing_docs)] // refuse to compile if documentation is missing\n#![deny(clippy::unwrap_used)] // don't allow unwrap\n#![cfg_attr(not(test), forbid(unsafe_code))]\n#![cfg_attr(docsrs, feature(doc_auto_cfg, doc_cfg, doc_cfg_hide))]\n#![cfg_attr(docsrs, doc(cfg_hide(docsrs)))]\n\n#[cfg(feature = \"batch\")]\nextern crate alloc;\n\n#[cfg(any(feature = \"std\", test))]\n#[macro_use]\nextern crate std;\n\npub use ed25519;\n\n#[cfg(feature = \"batch\")]\nmod batch;\nmod constants;\n#[cfg(feature = \"digest\")]\nmod context;\nmod errors;\nmod signature;\nmod signing;\nmod verifying;\n\n#[cfg(feature = \"hazmat\")]\npub mod hazmat;\n#[cfg(not(feature = \"hazmat\"))]\nmod hazmat;\n\n#[cfg(feature = \"digest\")]\npub use curve25519_dalek::digest::Digest;\n#[cfg(feature = \"digest\")]\npub use sha2::Sha512;\n\n#[cfg(feature = \"batch\")]\npub use crate::batch::*;\npub use crate::constants::*;\n#[cfg(feature = \"digest\")]\npub use crate::context::Context;\npub use crate::errors::*;\npub use crate::signing::*;\npub use crate::verifying::*;\n\n// Re-export the `Signer` and `Verifier` traits from the `signature` crate\n#[cfg(feature = \"digest\")]\npub use ed25519::signature::{DigestSigner, DigestVerifier};\npub use ed25519::signature::{Signer, Verifier};\npub use ed25519::Signature;\n\n#[cfg(feature = \"pkcs8\")]\npub use ed25519::pkcs8;\n"},{"id":2,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ed25519-2.2.3/src/lib.rs"},"crate_name":"ed25519","contents":null},{"id":3,"name":{"Local":"/rustc/library/core/src/result.rs"},"crate_name":"core","contents":null},{"id":4,"name":{"Local":"/rustc/library/core/src/lib.rs"},"crate_name":"core","contents":null},{"id":5,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-2.2.0/src/error.rs"},"crate_name":"signature","contents":null},{"id":6,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-2.2.0/src/lib.rs"},"crate_name":"signature","contents":null},{"id":7,"name":{"Local":"ed25519-dalek/src/signature.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! An ed25519 signature.\n\nuse core::fmt::Debug;\n\nuse curve25519_dalek::edwards::CompressedEdwardsY;\nuse curve25519_dalek::scalar::Scalar;\n\nuse crate::constants::*;\nuse crate::errors::*;\n\n/// An ed25519 signature.\n///\n/// # Note\n///\n/// These signatures, unlike the ed25519 signature reference implementation, are\n/// \"detached\"—that is, they do **not** include a copy of the message which has\n/// been signed.\n#[allow(non_snake_case)]\n#[derive(Copy, Eq, PartialEq)]\npub(crate) struct InternalSignature {\n /// `R` is an `EdwardsPoint`, formed by using an hash function with\n /// 512-bits output to produce the digest of:\n ///\n /// - the nonce half of the `ExpandedSecretKey`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in /l. The scalar is then multiplied by the distinguished\n /// basepoint to produce `R`, and `EdwardsPoint`.\n pub(crate) R: CompressedEdwardsY,\n\n /// `s` is a `Scalar`, formed by using an hash function with 512-bits output\n /// to produce the digest of:\n ///\n /// - the `r` portion of this `Signature`,\n /// - the `PublicKey` which should be used to verify this `Signature`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in /l.\n pub(crate) s: Scalar,\n}\n\nimpl Clone for InternalSignature {\n fn clone(&self) -> Self {\n *self\n }\n}\n\nimpl Debug for InternalSignature {\n fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(f, \"Signature( R: {:?}, s: {:?} )\", &self.R, &self.s)\n }\n}\n\n\n/// AENEAS-COMPAT (formal verification): opaque constructor — building the\n/// (extraction-opaque) `CompressedEdwardsY` aggregate directly cannot be\n/// interpreted by the extractor. Semantics: the tuple constructor.\npub(crate) fn compressed_from_bytes(bytes: [u8; 32]) -> CompressedEdwardsY {\n CompressedEdwardsY(bytes)\n}\n\n/// Ensures that the scalar `s` of a signature is within the bounds [0, 2^253).\n///\n/// **Unsafe**: This version of `check_scalar` permits signature malleability. See README.\n#[cfg(feature = \"legacy_compatibility\")]\n#[inline(always)]\nfn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n // The highest 3 bits must not be set. No other checking for the\n // remaining 2^253 - 2^252 + 27742317777372353535851937790883648493\n // potential non-reduced scalars is performed.\n //\n // This is compatible with ed25519-donna and libsodium when\n // -DED25519_COMPAT is NOT specified.\n if bytes[31] & 224 != 0 {\n return Err(InternalError::ScalarFormat.into());\n }\n\n // You cannot do arithmetic with scalars construct with Scalar::from_bits. We only use this\n // scalar for EdwardsPoint::vartime_double_scalar_mul_basepoint, which is an accepted usecase.\n // The `from_bits` method is deprecated because it's unsafe. We know this.\n #[allow(deprecated)]\n Ok(Scalar::from_bits(bytes))\n}\n\n/// Ensures that the scalar `s` of a signature is within the bounds [0, )\n///\n/// AENEAS-COMPAT (formal verification): explicit little-endian comparison\n/// against followed by `from_bytes_mod_order` (the identity on canonical\n/// bytes) — value-level semantics identical to\n/// `Scalar::from_canonical_bytes(bytes).into()`; the subtle machinery's\n/// `black_box` internals defeat the extractor, and the verification path is\n/// variable-time throughout.\n#[cfg(not(feature = \"legacy_compatibility\"))]\n#[inline(always)]\nfn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n /// = 2^252 + 27742317777372353535851937790883648493, little-endian.\n const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];\n // bytes < , most-significant byte first; the first differing byte decides.\n let mut lt = false;\n let mut decided = false;\n let mut i = 32;\n while i > 0 {\n let j = i - 1;\n if !decided {\n if bytes[j] < L_BYTES[j] {\n lt = true;\n decided = true;\n } else if bytes[j] > L_BYTES[j] {\n decided = true;\n }\n }\n i -= 1;\n }\n if lt {\n Ok(Scalar::from_bytes_mod_order(bytes))\n } else {\n Err(InternalError::ScalarFormat.into())\n }\n}\n\nimpl InternalSignature {\n /// Construct a `Signature` from a slice of bytes.\n ///\n /// # Scalar Malleability Checking\n ///\n /// As originally specified in the ed25519 paper (cf. the \"Malleability\"\n /// section of the README in this repo), no checks whatsoever were performed\n /// for signature malleability.\n ///\n /// Later, a semi-functional, hacky check was added to most libraries to\n /// \"ensure\" that the scalar portion, `s`, of the signature was reduced `mod\n /// \\ell`, the order of the basepoint:\n ///\n /// ```ignore\n /// if signature.s[31] & 224 != 0 {\n /// return Err();\n /// }\n /// ```\n ///\n /// This bit-twiddling ensures that the most significant three bits of the\n /// scalar are not set:\n ///\n /// ```python,ignore\n /// >>> 0b00010000 & 224\n /// 0\n /// >>> 0b00100000 & 224\n /// 32\n /// >>> 0b01000000 & 224\n /// 64\n /// >>> 0b10000000 & 224\n /// 128\n /// ```\n ///\n /// However, this check is hacky and insufficient to check that the scalar is\n /// fully reduced `mod \\ell = 2^252 + 27742317777372353535851937790883648493` as\n /// it leaves us with a guanteed bound of 253 bits. This means that there are\n /// `2^253 - 2^252 + 2774231777737235353585193779088364849311` remaining scalars\n /// which could cause malleabilllity.\n ///\n /// RFC8032 [states](https://tools.ietf.org/html/rfc8032#section-5.1.7):\n ///\n /// > To verify a signature on a message M using public key A, [...]\n /// > first split the signature into two 32-octet halves. Decode the first\n /// > half as a point R, and the second half as an integer S, in the range\n /// > 0 <= s < L. Decode the public key A as point A'. If any of the\n /// > decodings fail (including S being out of range), the signature is\n /// > invalid.\n ///\n /// However, by the time this was standardised, most libraries in use were\n /// only checking the most significant three bits. (See also the\n /// documentation for [`crate::VerifyingKey::verify_strict`].)\n #[inline]\n #[allow(non_snake_case)]\n pub fn from_bytes(bytes: &[u8; SIGNATURE_LENGTH]) -> Result<InternalSignature, SignatureError> {\n // TODO: Use bytes.split_array_ref once its in MSRV.\n // AENEAS-COMPAT (formal verification): plain index loops instead of\n // range-slicing + copy_from_slice — the SliceIndex const-generics\n // machinery defeats the extractor. Semantics identical.\n let mut R_bytes: [u8; 32] = [0u8; 32];\n let mut s_bytes: [u8; 32] = [0u8; 32];\n let mut i = 0;\n while i < 32 {\n R_bytes[i] = bytes[i];\n s_bytes[i] = bytes[i + 32];\n i += 1;\n }\n\n Ok(InternalSignature {\n R: compressed_from_bytes(R_bytes),\n s: check_scalar(s_bytes)?,\n })\n }\n}\n\nimpl TryFrom<&ed25519::Signature> for InternalSignature {\n type Error = SignatureError;\n\n fn try_from(sig: &ed25519::Signature) -> Result<InternalSignature, SignatureError> {\n InternalSignature::from_bytes(&sig.to_bytes())\n }\n}\n\nimpl From<InternalSignature> for ed25519::Signature {\n fn from(sig: InternalSignature) -> ed25519::Signature {\n ed25519::Signature::from_components(*sig.R.as_bytes(), *sig.s.as_bytes())\n }\n}\n"},{"id":8,"name":{"Local":"/rustc/library/core/src/ops/control_flow.rs"},"crate_name":"core","contents":null},{"id":9,"name":{"Local":"/rustc/library/core/src/ops/mod.rs"},"crate_name":"core","contents":null},{"id":10,"name":{"Local":"/rustc/library/core/src/convert/mod.rs"},"crate_name":"core","contents":null},{"id":11,"name":{"Local":"curve25519-dalek/src/edwards.rs"},"crate_name":"curve25519_dalek","contents":null},{"id":12,"name":{"Local":"curve25519-dalek/src/lib.rs"},"crate_name":"curve25519_dalek","contents":null},{"id":13,"name":{"Local":"ed25519-dalek/src/errors.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! Errors which may occur when parsing keys and/or signatures to or from wire formats.\n\n// rustc seems to think the typenames in match statements (e.g. in\n// Display) should be snake cased, for some reason.\n#![allow(non_snake_case)]\n\nuse core::fmt;\nuse core::fmt::Display;\n\n#[cfg(feature = \"std\")]\nuse std::error::Error;\n\n/// Internal errors. Most application-level developers will likely not\n/// need to pay any attention to these.\n#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]\npub(crate) enum InternalError {\n PointDecompression,\n ScalarFormat,\n /// An error in the length of bytes handed to a constructor.\n ///\n /// To use this, pass a string specifying the `name` of the type which is\n /// returning the error, and the `length` in bytes which its constructor\n /// expects.\n BytesLength {\n name: &'static str,\n length: usize,\n },\n /// The verification equation wasn't satisfied\n Verify,\n /// Two arrays did not match in size, making the called signature\n /// verification method impossible.\n #[cfg(feature = \"batch\")]\n ArrayLength {\n name_a: &'static str,\n length_a: usize,\n name_b: &'static str,\n length_b: usize,\n name_c: &'static str,\n length_c: usize,\n },\n /// An ed25519ph signature can only take up to 255 octets of context.\n #[cfg(feature = \"digest\")]\n PrehashedContextLength,\n /// A mismatched (public, secret) key pair.\n MismatchedKeypair,\n}\n\nimpl Display for InternalError {\n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n match *self {\n InternalError::PointDecompression => write!(f, \"Cannot decompress Edwards point\"),\n InternalError::ScalarFormat => write!(f, \"Cannot use scalar with high-bit set\"),\n InternalError::BytesLength { name: n, length: l } => {\n write!(f, \"{} must be {} bytes in length\", n, l)\n }\n InternalError::Verify => write!(f, \"Verification equation was not satisfied\"),\n #[cfg(feature = \"batch\")]\n InternalError::ArrayLength {\n name_a: na,\n length_a: la,\n name_b: nb,\n length_b: lb,\n name_c: nc,\n length_c: lc,\n } => write!(\n f,\n \"Arrays must be the same length: {} has length {},\n {} has length {}, {} has length {}.\",\n na, la, nb, lb, nc, lc\n ),\n #[cfg(feature = \"digest\")]\n InternalError::PrehashedContextLength => write!(\n f,\n \"An ed25519ph signature can only take up to 255 octets of context\"\n ),\n InternalError::MismatchedKeypair => write!(f, \"Mismatched Keypair detected\"),\n }\n }\n}\n\n#[cfg(feature = \"std\")]\nimpl Error for InternalError {}\n\n/// Errors which may occur while processing signatures and keypairs.\n///\n/// This error may arise due to:\n///\n/// * Being given bytes with a length different to what was expected.\n///\n/// * A problem decompressing `r`, a curve point, in the `Signature`, or the\n/// curve point for a `PublicKey`.\n///\n/// * A problem with the format of `s`, a scalar, in the `Signature`. This\n/// is only raised if the high-bit of the scalar was set. (Scalars must\n/// only be constructed from 255-bit integers.)\n///\n/// * Failure of a signature to satisfy the verification equation.\npub type SignatureError = ed25519::signature::Error;\n\nimpl From<InternalError> for SignatureError {\n #[cfg(not(feature = \"std\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"std\")]\n fn from(err: InternalError) -> SignatureError {\n SignatureError::from_source(err)\n }\n}\n"},{"id":14,"name":{"Local":"curve25519-dalek/src/scalar.rs"},"crate_name":"curve25519_dalek","contents":null},{"id":15,"name":{"Local":"/rustc/library/core/src/ops/try_trait.rs"},"crate_name":"core","contents":null},{"id":16,"name":{"Local":"/rustc/library/core/src/ops/arith.rs"},"crate_name":"core","contents":null}],"item_names":[{"key":{"Fun":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["verify_sha512",0]}]},{"key":{"Fun":1},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["recompute_r_sha512",0]}]},{"key":{"Type":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["VerifyingKey",0]}]},{"key":{"Type":1},"value":[{"Ident":["ed25519",0]},{"Ident":["Signature",0]}]},{"key":{"Type":2},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Ident":["Result",0]}]},{"key":{"Type":3},"value":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Ident":["Error",0]}]},{"key":{"Type":4},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["InternalSignature",0]}]},{"key":{"Type":5},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["control_flow",0]},{"Ident":["ControlFlow",0]}]},{"key":{"Type":6},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Infallible",0]}]},{"key":{"Type":7},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["CompressedEdwardsY",0]}]},{"key":{"Type":8},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Ident":["InternalError",0]}]},{"key":{"TraitImpl":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}}]},{"key":{"Fun":2},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}},{"Ident":["try_from",0]}]},{"key":{"TraitImpl":1},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}}]},{"key":{"Fun":3},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["branch",0]}]},{"key":{"Fun":4},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[557,{"Adt":{"id":{"Adt":7},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["as_bytes",0]}]},{"key":{"TraitImpl":2},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}}]},{"key":{"Fun":5},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}]},{"key":{"TraitDecl":0},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]}]},{"key":{"TraitImpl":3},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}}]},{"key":{"TraitImpl":4},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}}]},{"key":{"Fun":6},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}},{"Ident":["into",0]}]},{"key":{"TraitImpl":5},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}}]},{"key":{"Type":9},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Ident":["Scalar",0]}]},{"key":{"Type":10},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}]},{"key":{"Fun":7},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_hash3",0]}]},{"key":{"Fun":8},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[748,{"Adt":{"id":{"Adt":9},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"TraitImpl":6},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}}]},{"key":{"Fun":9},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["neg",0]}]},{"key":{"Fun":10},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[772,{"Adt":{"id":{"Adt":10},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":11},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]}]},{"key":{"Fun":12},"value":[{"Ident":["ed25519",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[347,{"Adt":{"id":{"Adt":1},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}]},{"key":{"Fun":13},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[413,{"Adt":{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":7}}]},{"key":{"Fun":14},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":15},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]},{"Ident":["from",0]}]},{"key":{"Fun":16},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]}]},{"key":{"Fun":17},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]}]},{"key":{"Global":0},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":18},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]},{"Ident":["try_from",0]}]},{"key":{"Fun":19},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["compressed_from_bytes",0]}]},{"key":{"Fun":20},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}]},{"key":{"Fun":21},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}]},{"key":{"Fun":22},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}]},{"key":{"Fun":23},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}]},{"key":{"Fun":24},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]},{"Ident":["into",0]}]},{"key":{"Fun":25},"value":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[379,{"Adt":{"id":{"Adt":3},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["new",0]}]},{"key":{"Type":11},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["{vtable}",0]}]},{"key":{"Fun":26},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["neg",0]}]},{"key":{"Global":1},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}]},{"key":{"Fun":27},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}]},{"key":{"Fun":28},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}]}],"assoc_item_names":[{"types":[],"methods":["from"],"consts":[]},{"types":["Error"],"methods":["try_from"],"consts":[]},{"types":["Output","Residual","Self_Clause1_TryType"],"methods":["from_output","branch"],"consts":[]},{"types":[],"methods":["from_residual"],"consts":[]},{"types":["TryType"],"methods":[],"consts":[]},{"types":[],"methods":["into"],"consts":[]},{"types":["Output"],"methods":["neg"],"consts":[]}],"short_names":[{"key":{"TraitImpl":0},"value":[{"Ident":["impl_TryFrom_for_InternalSignature",0]}]},{"key":{"Fun":2},"value":[{"Impl":{"Trait":0}},{"Ident":["try_from",0]}]},{"key":{"TraitImpl":1},"value":[{"Ident":["impl_Try_for_Result",0]}]},{"key":{"Fun":3},"value":[{"Impl":{"Trait":1}},{"Ident":["branch",0]}]},{"key":{"TraitImpl":2},"value":[{"Ident":["impl_FromResidual_Result_for_Result",0]}]},{"key":{"Fun":5},"value":[{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}]},{"key":{"TraitImpl":3},"value":[{"Ident":["impl_From_for_T",0]}]},{"key":{"TraitImpl":4},"value":[{"Ident":["impl_Into_for_T",0]}]},{"key":{"Fun":6},"value":[{"Impl":{"Trait":4}},{"Ident":["into",0]}]},{"key":{"TraitImpl":5},"value":[{"Ident":["impl_From_InternalError_for_Error",0]}]},{"key":{"TraitImpl":6},"value":[{"Ident":["impl_Neg_for_EdwardsPoint",0]}]},{"key":{"Fun":9},"value":[{"Impl":{"Trait":6}},{"Ident":["neg",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["impl_Residual_for_Result_Infallible",0]}]},{"key":{"Fun":14},"value":[{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":16},"value":[{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"Fun":17},"value":[{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"Global":0},"value":[{"Impl":{"Trait":6}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":0},"value":[{"Ident":["verify_sha512",0]}]},{"key":{"Fun":11},"value":[{"Ident":["compress",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["TryFrom",0]}]},{"key":{"Fun":13},"value":[{"Ident":["from_bytes",0]}]},{"key":{"Type":6},"value":[{"Ident":["Infallible",0]}]},{"key":{"Fun":12},"value":[{"Ident":["to_bytes",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["Into",0]}]},{"key":{"Type":3},"value":[{"Ident":["Error",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["Residual",0]}]},{"key":{"Fun":7},"value":[{"Ident":["sha512_hash3",0]}]},{"key":{"Type":8},"value":[{"Ident":["InternalError",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["FromResidual",0]}]},{"key":{"Fun":25},"value":[{"Ident":["new",0]}]},{"key":{"Fun":4},"value":[{"Ident":["as_bytes",0]}]},{"key":{"Type":7},"value":[{"Ident":["CompressedEdwardsY",0]}]},{"key":{"TraitDecl":0},"value":[{"Ident":["From",0]}]},{"key":{"Fun":1},"value":[{"Ident":["recompute_r_sha512",0]}]},{"key":{"Fun":19},"value":[{"Ident":["compressed_from_bytes",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["Try",0]}]},{"key":{"Type":5},"value":[{"Ident":["ControlFlow",0]}]},{"key":{"Type":0},"value":[{"Ident":["VerifyingKey",0]}]},{"key":{"Fun":8},"value":[{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"Type":10},"value":[{"Ident":["EdwardsPoint",0]}]},{"key":{"Type":2},"value":[{"Ident":["Result",0]}]},{"key":{"Fun":10},"value":[{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":20},"value":[{"Ident":["check_scalar",0]}]},{"key":{"Type":1},"value":[{"Ident":["Signature",0]}]},{"key":{"Global":1},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Fun":28},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Type":4},"value":[{"Ident":["InternalSignature",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["Neg",0]}]},{"key":{"Type":9},"value":[{"Ident":["Scalar",0]}]},{"key":{"Fun":27},"value":[{"Ident":["from_bytes_mod_order",0]}]}],"type_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["VerifyingKey",0]}],"span":{"data":{"file_id":0,"beg":{"line":58,"col":0},"end":{"line":64,"col":1}},"generated_from_span":null},"source_text":"pub struct VerifyingKey {\n /// Serialized compressed Edwards-y point.\n pub(crate) compressed: CompressedEdwardsY,\n\n /// Decompressed Edwards point used for curve arithmetic operations.\n pub(crate) point: EdwardsPoint,\n}","attr_info":{"attributes":[{"DocComment":" An ed25519 public key."},{"DocComment":""},{"DocComment":" # Note"},{"DocComment":""},{"DocComment":" The `Eq` and `Hash` impls here use the compressed Edwards y encoding, _not_ the algebraic"},{"DocComment":" representation. This means if this `VerifyingKey` is non-canonically encoded, it will be"},{"DocComment":" considered unequal to the other equivalent encoding, despite the two representing the same"},{"DocComment":" point. More encoding details can be found"},{"DocComment":" [here](https://hdevalence.ca/blog/2020-10-04-its-25519am)."},{"DocComment":" If you want to make sure that signatures produced with respect to those sorts of public keys"},{"DocComment":" are rejected, use [`VerifyingKey::verify_strict`]."}],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Struct":[{"span":{"data":{"file_id":0,"beg":{"line":60,"col":4},"end":{"line":60,"col":45}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Serialized compressed Edwards-y point."}],"inline":null,"rename":null,"public":false},"name":"compressed","ty":{"Deduplicated":557}},{"span":{"data":{"file_id":0,"beg":{"line":63,"col":4},"end":{"line":63,"col":34}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Decompressed Edwards point used for curve arithmetic operations."}],"inline":null,"rename":null,"public":false},"name":"point","ty":{"Deduplicated":772}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":192,"align":8,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519",0]},{"Ident":["Signature",0]}],"span":{"data":{"file_id":2,"beg":{"line":303,"col":0},"end":{"line":303,"col":20}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Ed25519 signature."},{"DocComment":""},{"DocComment":" This type represents a container for the byte serialization of an Ed25519"},{"DocComment":" signature, and does not necessarily represent well-formed field or curve"},{"DocComment":" elements."},{"DocComment":""},{"DocComment":" Signature verification libraries are expected to reject invalid field"},{"DocComment":" elements at the time a signature is verified."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":64,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"C","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Ident":["Result",0]}],"span":{"data":{"file_id":3,"beg":{"line":557,"col":0},"end":{"line":557,"col":21}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" `Result` is a type that represents either success ([`Ok`]) or failure ([`Err`])."},{"DocComment":""},{"DocComment":" See the [module documentation](self) for details."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Result"},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":3,"beg":{"line":561,"col":4},"end":{"line":561,"col":6}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Contains the success value"}],"inline":null,"rename":null,"public":true},"name":"Ok","fields":[{"span":{"data":{"file_id":3,"beg":{"line":561,"col":53},"end":{"line":561,"col":54}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"HashConsedValue":[1394,{"TypeVar":{"Free":0}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":3,"beg":{"line":566,"col":4},"end":{"line":566,"col":7}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Contains the error value"}],"inline":null,"rename":null,"public":true},"name":"Err","fields":[{"span":{"data":{"file_id":3,"beg":{"line":566,"col":54},"end":{"line":566,"col":55}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"HashConsedValue":[1395,{"TypeVar":{"Free":1}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}}]},"layout":[],"ptr_metadata":"None"},{"def_id":3,"item_meta":{"name":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Ident":["Error",0]}],"span":{"data":{"file_id":5,"beg":{"line":26,"col":0},"end":{"line":26,"col":16}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Signature errors."},{"DocComment":""},{"DocComment":" This type is deliberately opaque as to avoid sidechannel leakage which"},{"DocComment":" could potentially be used recover signing private keys or forge signatures"},{"DocComment":" (e.g. [BB'06])."},{"DocComment":""},{"DocComment":" When the `std` feature is enabled, it impls [`std::error::Error`] and"},{"DocComment":" supports an optional [`std::error::Error::source`], which can be used by"},{"DocComment":" things like remote signers (e.g. HSM, KMS) to report I/O or auth errors."},{"DocComment":""},{"DocComment":" [BB'06]: https://en.wikipedia.org/wiki/Daniel_Bleichenbacher"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":0,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":4,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["InternalSignature",0]}],"span":{"data":{"file_id":7,"beg":{"line":29,"col":0},"end":{"line":51,"col":1}},"generated_from_span":null},"source_text":"pub(crate) struct InternalSignature {\n /// `R` is an `EdwardsPoint`, formed by using an hash function with\n /// 512-bits output to produce the digest of:\n ///\n /// - the nonce half of the `ExpandedSecretKey`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in /l. The scalar is then multiplied by the distinguished\n /// basepoint to produce `R`, and `EdwardsPoint`.\n pub(crate) R: CompressedEdwardsY,\n\n /// `s` is a `Scalar`, formed by using an hash function with 512-bits output\n /// to produce the digest of:\n ///\n /// - the `r` portion of this `Signature`,\n /// - the `PublicKey` which should be used to verify this `Signature`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in /l.\n pub(crate) s: Scalar,\n}","attr_info":{"attributes":[{"DocComment":" An ed25519 signature."},{"DocComment":""},{"DocComment":" # Note"},{"DocComment":""},{"DocComment":" These signatures, unlike the ed25519 signature reference implementation, are"},{"DocComment":" \"detached\"—that is, they do **not** include a copy of the message which has"},{"DocComment":" been signed."},{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Struct":[{"span":{"data":{"file_id":7,"beg":{"line":39,"col":4},"end":{"line":39,"col":36}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" `R` is an `EdwardsPoint`, formed by using an hash function with"},{"DocComment":" 512-bits output to produce the digest of:"},{"DocComment":""},{"DocComment":" - the nonce half of the `ExpandedSecretKey`, and"},{"DocComment":" - the message to be signed."},{"DocComment":""},{"DocComment":" This digest is then interpreted as a `Scalar` and reduced into an"},{"DocComment":" element in /l. The scalar is then multiplied by the distinguished"},{"DocComment":" basepoint to produce `R`, and `EdwardsPoint`."}],"inline":null,"rename":null,"public":false},"name":"R","ty":{"Deduplicated":557}},{"span":{"data":{"file_id":7,"beg":{"line":50,"col":4},"end":{"line":50,"col":24}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" `s` is a `Scalar`, formed by using an hash function with 512-bits output"},{"DocComment":" to produce the digest of:"},{"DocComment":""},{"DocComment":" - the `r` portion of this `Signature`,"},{"DocComment":" - the `PublicKey` which should be used to verify this `Signature`, and"},{"DocComment":" - the message to be signed."},{"DocComment":""},{"DocComment":" This digest is then interpreted as a `Scalar` and reduced into an"},{"DocComment":" element in /l."}],"inline":null,"rename":null,"public":false},"name":"s","ty":{"Deduplicated":748}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":64,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["control_flow",0]},{"Ident":["ControlFlow",0]}],"span":{"data":{"file_id":8,"beg":{"line":89,"col":0},"end":{"line":89,"col":31}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to tell an operation whether it should exit early or go on as usual."},{"DocComment":""},{"DocComment":" This is used when exposing things (like graph traversals or visitors) where"},{"DocComment":" you want the user to be able to choose whether to exit early."},{"DocComment":" Having the enum makes it clearer -- no more wondering \"wait, what did `false`"},{"DocComment":" mean again?\" -- and allows including a value."},{"DocComment":""},{"DocComment":" Similar to [`Option`] and [`Result`], this enum can be used with the `?` operator"},{"DocComment":" to return immediately if the [`Break`] variant is present or otherwise continue normally"},{"DocComment":" with the value inside the [`Continue`] variant."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" Early-exiting from [`Iterator::try_for_each`]:"},{"DocComment":" ```"},{"DocComment":" use std::ops::ControlFlow;"},{"DocComment":""},{"DocComment":" let r = (2..100).try_for_each(|x| {"},{"DocComment":" if 403 % x == 0 {"},{"DocComment":" return ControlFlow::Break(x)"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" });"},{"DocComment":" assert_eq!(r, ControlFlow::Break(13));"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" A basic tree traversal:"},{"DocComment":" ```"},{"DocComment":" use std::ops::ControlFlow;"},{"DocComment":""},{"DocComment":" pub struct TreeNode<T> {"},{"DocComment":" value: T,"},{"DocComment":" left: Option<Box<TreeNode<T>>>,"},{"DocComment":" right: Option<Box<TreeNode<T>>>,"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl<T> TreeNode<T> {"},{"DocComment":" pub fn traverse_inorder<B>(&self, f: &mut impl FnMut(&T) -> ControlFlow<B>) -> ControlFlow<B> {"},{"DocComment":" if let Some(left) = &self.left {"},{"DocComment":" left.traverse_inorder(f)?;"},{"DocComment":" }"},{"DocComment":" f(&self.value)?;"},{"DocComment":" if let Some(right) = &self.right {"},{"DocComment":" right.traverse_inorder(f)?;"},{"DocComment":" }"},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" }"},{"DocComment":" fn leaf(value: T) -> Option<Box<TreeNode<T>>> {"},{"DocComment":" Some(Box::new(Self { value, left: None, right: None }))"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" let node = TreeNode {"},{"DocComment":" value: 0,"},{"DocComment":" left: TreeNode::leaf(1),"},{"DocComment":" right: Some(Box::new(TreeNode {"},{"DocComment":" value: -1,"},{"DocComment":" left: TreeNode::leaf(5),"},{"DocComment":" right: TreeNode::leaf(2),"},{"DocComment":" }))"},{"DocComment":" };"},{"DocComment":" let mut sum = 0;"},{"DocComment":""},{"DocComment":" let res = node.traverse_inorder(&mut |val| {"},{"DocComment":" if *val < 0 {"},{"DocComment":" ControlFlow::Break(*val)"},{"DocComment":" } else {"},{"DocComment":" sum += *val;"},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" }"},{"DocComment":" });"},{"DocComment":" assert_eq!(res, ControlFlow::Break(-1));"},{"DocComment":" assert_eq!(sum, 6);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`Break`]: ControlFlow::Break"},{"DocComment":" [`Continue`]: ControlFlow::Continue"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"ControlFlow"},"generics":{"regions":[],"types":[{"index":0,"name":"B"},{"index":1,"name":"C"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":8,"beg":{"line":93,"col":4},"end":{"line":93,"col":12}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Move on to the next phase of the operation as normal."}],"inline":null,"rename":null,"public":true},"name":"Continue","fields":[{"span":{"data":{"file_id":8,"beg":{"line":93,"col":13},"end":{"line":93,"col":14}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"Deduplicated":1395}}],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":8,"beg":{"line":97,"col":4},"end":{"line":97,"col":9}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Exit the operation without running subsequent phases."}],"inline":null,"rename":null,"public":true},"name":"Break","fields":[{"span":{"data":{"file_id":8,"beg":{"line":97,"col":10},"end":{"line":97,"col":11}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"Deduplicated":1394}}],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}}]},"layout":[],"ptr_metadata":"None"},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Infallible",0]}],"span":{"data":{"file_id":10,"beg":{"line":930,"col":0},"end":{"line":930,"col":19}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The error type for errors that can never happen."},{"DocComment":""},{"DocComment":" Since this enum has no variant, a value of this type can never actually exist."},{"DocComment":" This can be useful for generic APIs that use [`Result`] and parameterize the error type,"},{"DocComment":" to indicate that the result is always [`Ok`]."},{"DocComment":""},{"DocComment":" For example, the [`TryFrom`] trait (conversion that returns a [`Result`])"},{"DocComment":" has a blanket implementation for all types where a reverse [`Into`] implementation exists."},{"DocComment":""},{"DocComment":" ```ignore (illustrates std code, duplicating the impl in a doctest would be an error)"},{"DocComment":" impl<T, U> TryFrom<U> for T where U: Into<T> {"},{"DocComment":" type Error = Infallible;"},{"DocComment":""},{"DocComment":" fn try_from(value: U) -> Result<Self, Infallible> {"},{"DocComment":" Ok(U::into(value)) // Never returns `Err`"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" # Future compatibility"},{"DocComment":""},{"DocComment":" This enum has the same role as [the `!` “never” type][never],"},{"DocComment":" which is unstable in this version of Rust."},{"DocComment":" When `!` is stabilized, we plan to make `Infallible` a type alias to it:"},{"DocComment":""},{"DocComment":" ```ignore (illustrates future std change)"},{"DocComment":" pub type Infallible = !;"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" … and eventually deprecate `Infallible`."},{"DocComment":""},{"DocComment":" However there is one case where `!` syntax can be used"},{"DocComment":" before `!` is stabilized as a full-fledged type: in the position of a functions return type."},{"DocComment":" Specifically, it is possible to have implementations for two different function pointer types:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" trait MyTrait {}"},{"DocComment":" impl MyTrait for fn() -> ! {}"},{"DocComment":" impl MyTrait for fn() -> std::convert::Infallible {}"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" With `Infallible` being an enum, this code is valid."},{"DocComment":" However when `Infallible` becomes an alias for the never type,"},{"DocComment":" the two `impl`s will start to overlap"},{"DocComment":" and therefore will be disallowed by the languages trait coherence rules."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":0,"align":1,"discriminator":null,"uninhabited":true,"variant_layouts":[],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":7,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["CompressedEdwardsY",0]}],"span":{"data":{"file_id":11,"beg":{"line":164,"col":0},"end":{"line":164,"col":29}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" In \"Edwards y\" / \"Ed25519\" format, the curve point \\\\((x,y)\\\\) is"},{"DocComment":" determined by the \\\\(y\\\\)-coordinate and the sign of \\\\(x\\\\)."},{"DocComment":""},{"DocComment":" The first 255 bits of a `CompressedEdwardsY` represent the"},{"DocComment":" \\\\(y\\\\)-coordinate. The high bit of the 32nd byte gives the sign of \\\\(x\\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":8,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Ident":["InternalError",0]}],"span":{"data":{"file_id":13,"beg":{"line":25,"col":0},"end":{"line":55,"col":1}},"generated_from_span":null},"source_text":"pub(crate) enum InternalError {\n PointDecompression,\n ScalarFormat,\n /// An error in the length of bytes handed to a constructor.\n ///\n /// To use this, pass a string specifying the `name` of the type which is\n /// returning the error, and the `length` in bytes which its constructor\n /// expects.\n BytesLength {\n name: &'static str,\n length: usize,\n },\n /// The verification equation wasn't satisfied\n Verify,\n /// Two arrays did not match in size, making the called signature\n /// verification method impossible.\n #[cfg(feature = \"batch\")]\n ArrayLength {\n name_a: &'static str,\n length_a: usize,\n name_b: &'static str,\n length_b: usize,\n name_c: &'static str,\n length_c: usize,\n },\n /// An ed25519ph signature can only take up to 255 octets of context.\n #[cfg(feature = \"digest\")]\n PrehashedContextLength,\n /// A mismatched (public, secret) key pair.\n MismatchedKeypair,\n}","attr_info":{"attributes":[{"DocComment":" Internal errors. Most application-level developers will likely not"},{"DocComment":" need to pay any attention to these."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":13,"beg":{"line":26,"col":4},"end":{"line":26,"col":22}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"PointDecompression","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":13,"beg":{"line":27,"col":4},"end":{"line":27,"col":16}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"ScalarFormat","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}},{"id":2,"span":{"data":{"file_id":13,"beg":{"line":33,"col":4},"end":{"line":33,"col":15}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" An error in the length of bytes handed to a constructor."},{"DocComment":""},{"DocComment":" To use this, pass a string specifying the `name` of the type which is"},{"DocComment":" returning the error, and the `length` in bytes which its constructor"},{"DocComment":" expects."}],"inline":null,"rename":null,"public":false},"name":"BytesLength","fields":[{"span":{"data":{"file_id":13,"beg":{"line":34,"col":8},"end":{"line":34,"col":26}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"name","ty":{"HashConsedValue":[1397,{"Ref":["Static",{"HashConsedValue":[1396,{"Adt":{"id":{"Builtin":"Str"},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]}},{"span":{"data":{"file_id":13,"beg":{"line":35,"col":8},"end":{"line":35,"col":21}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"length","ty":{"HashConsedValue":[565,{"Literal":{"UInt":"Usize"}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","2"]}}},{"id":3,"span":{"data":{"file_id":13,"beg":{"line":38,"col":4},"end":{"line":38,"col":10}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" The verification equation wasn't satisfied"}],"inline":null,"rename":null,"public":false},"name":"Verify","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","3"]}}},{"id":4,"span":{"data":{"file_id":13,"beg":{"line":54,"col":4},"end":{"line":54,"col":21}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" A mismatched (public, secret) key pair."}],"inline":null,"rename":null,"public":false},"name":"MismatchedKeypair","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","4"]}}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":8,"discriminator":{"Branch":{"offset":0,"int_ty":{"Unsigned":"U64"},"children":[[{"start":{"Unsigned":["U64","0"]},"end":{"Unsigned":["U64","0"]}},{"Known":0}],[{"start":{"Unsigned":["U64","1"]},"end":{"Unsigned":["U64","1"]}},{"Known":1}],[{"start":{"Unsigned":["U64","2"]},"end":{"Unsigned":["U64","2"]}},{"Known":2}],[{"start":{"Unsigned":["U64","3"]},"end":{"Unsigned":["U64","3"]}},{"Known":3}],[{"start":{"Unsigned":["U64","4"]},"end":{"Unsigned":["U64","4"]}},{"Known":4}]],"fallback":"Invalid"}},"uninhabited":false,"variant_layouts":[{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","0"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","1"]}]]},{"field_offsets":[16,8],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","2"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","3"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","4"]}]]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":9,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Ident":["Scalar",0]}],"span":{"data":{"file_id":14,"beg":{"line":202,"col":0},"end":{"line":202,"col":17}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The `Scalar` struct holds an element of \\\\(\\mathbb Z / \\ell\\mathbb Z \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":10,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":376,"col":0},"end":{"line":376,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" An `EdwardsPoint` represents a point on the Edwards form of Curve25519."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":160,"align":8,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,40,80,120],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},null],"fun_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["verify_sha512",0]}],"span":{"data":{"file_id":0,"beg":{"line":733,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn verify_sha512(\n key: &VerifyingKey,\n message: &[u8],\n sig: &ed25519::Signature,\n) -> Result<(), SignatureError> {\n // (parameter named `sig`, not `signature`: the extractor's generated\n // code would otherwise shadow the `signature::` crate namespace)\n let sig = InternalSignature::try_from(sig)?;\n let expected_R = recompute_r_sha512(key, &sig, message);\n // AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes\n // through machinery the extractor cannot interpret). Semantics identical\n // to `expected_R == signature.R`.\n let e = expected_R.as_bytes();\n let r = sig.R.as_bytes();\n let mut equal = true;\n let mut i = 0;\n while i < 32 {\n if e[i] != r[i] {\n equal = false;\n }\n i += 1;\n }\n if equal {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n}","attr_info":{"attributes":[{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1421,{"Ref":[{"Var":{"Free":0}},{"HashConsedValue":[334,{"Adt":{"id":{"Adt":0},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]},{"HashConsedValue":[1422,{"Ref":[{"Var":{"Free":1}},{"HashConsedValue":[337,{"Slice":{"HashConsedValue":[336,{"Literal":{"UInt":"U8"}}]}}]},"Shared"]}]},{"HashConsedValue":[1423,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":347},"Shared"]}]}],"output":{"HashConsedValue":[380,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[372,{"Adt":{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":733,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"bound_body_regions":29,"locals":{"arg_count":3,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":0,"beg":{"line":737,"col":5},"end":{"line":737,"col":31}},"generated_from_span":null},"ty":{"Deduplicated":380}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":734,"col":4},"end":{"line":734,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[383,{"Ref":[{"Body":1},{"Deduplicated":334},"Shared"]}]}},{"index":2,"name":"message","span":{"data":{"file_id":0,"beg":{"line":735,"col":4},"end":{"line":735,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[386,{"Ref":[{"Body":3},{"Deduplicated":337},"Shared"]}]}},{"index":3,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":736,"col":4},"end":{"line":736,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[389,{"Ref":[{"Body":5},{"Deduplicated":347},"Shared"]}]}},{"index":4,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"HashConsedValue":[521,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[520,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[519,{"Adt":{"id":{"Adt":6},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":413}],"const_generics":[],"trait_refs":[]}}}]}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"ty":{"HashConsedValue":[524,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"ty":{"HashConsedValue":[525,{"Ref":[{"Body":6},{"Deduplicated":347},"Shared"]}]}},{"index":8,"name":"residual","span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":10,"name":"val","span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":11,"name":"expected_R","span":{"data":{"file_id":0,"beg":{"line":741,"col":8},"end":{"line":741,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"ty":{"HashConsedValue":[558,{"Ref":[{"Body":7},{"Deduplicated":334},"Shared"]}]}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[561,{"Ref":[{"Body":9},{"Deduplicated":413},"Shared"]}]}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[562,{"Ref":[{"Body":10},{"Deduplicated":413},"Shared"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"ty":{"HashConsedValue":[563,{"Ref":[{"Body":11},{"Deduplicated":337},"Shared"]}]}},{"index":16,"name":"e","span":{"data":{"file_id":0,"beg":{"line":745,"col":8},"end":{"line":745,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[568,{"Ref":[{"Body":13},{"HashConsedValue":[566,{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}]}]},"Shared"]}]}},{"index":17,"name":null,"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"ty":{"HashConsedValue":[571,{"Ref":[{"Body":15},{"Deduplicated":557},"Shared"]}]}},{"index":18,"name":"r","span":{"data":{"file_id":0,"beg":{"line":746,"col":8},"end":{"line":746,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[572,{"Ref":[{"Body":16},{"Deduplicated":566},"Shared"]}]}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[573,{"Ref":[{"Body":17},{"Deduplicated":557},"Shared"]}]}},{"index":20,"name":"equal","span":{"data":{"file_id":0,"beg":{"line":747,"col":8},"end":{"line":747,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[575,{"Literal":"Bool"}]}},{"index":21,"name":"i","span":{"data":{"file_id":0,"beg":{"line":748,"col":8},"end":{"line":748,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":23,"name":null,"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":28,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":372}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[611,{"Adt":{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]}},{"index":34,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1212,{"Ref":["Erased",{"Deduplicated":566},"Shared"]}]}},{"index":35,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1211,{"Ref":["Erased",{"Deduplicated":336},"Shared"]}]}},{"index":36,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":37,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":760,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"id":4,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"id":5,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":6,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"id":7,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"id":8,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"id":9,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":525}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":389}}},"Yes"]}]},"comments_before":["(parameter named `sig`, not `signature`: the extractor's generated","code would otherwise shadow the `signature::` crate namespace)"]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"id":10,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":2}},"generics":{"regions":[{"Body":18}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":7},"ty":{"Deduplicated":525}}}],"dest":{"kind":{"Local":6},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":45},"end":{"line":740,"col":46}},"generated_from_span":null},"id":11,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":12,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":524}}}],"dest":{"kind":{"Local":5},"ty":{"Deduplicated":521}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":13,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":760,"col":1}},"generated_from_span":null},"id":27,"kind":{"Switch":{"Match":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},[[[0],{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":760,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":16,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":17,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":18,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":19,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":20,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"HashConsedValue":[709,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":520}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":380}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":21,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":22,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":47},"end":{"line":740,"col":48}},"generated_from_span":null},"id":23,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":24,"kind":{"StorageDead":4},"comments_before":["AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes","through machinery the extractor cannot interpret). Semantics identical","to `expected_R == signature.R`."]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":1},"end":{"line":760,"col":1}},"generated_from_span":null},"id":25,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":28,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":29,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":413}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":413}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":30,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":413}},{"Use":[{"Copy":{"kind":{"Local":10},"ty":{"Deduplicated":413}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":31,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":47},"end":{"line":740,"col":48}},"generated_from_span":null},"id":32,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":8},"end":{"line":741,"col":18}},"generated_from_span":null},"id":33,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"id":34,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"id":35,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":558}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":36,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":37,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":38,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":562}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":413}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":39,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":561}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":562}},"Deref"]},"ty":{"Deduplicated":413}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"id":40,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"id":41,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":563}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":386}},"Deref"]},"ty":{"Deduplicated":337}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":386}},"PtrMetadata"]},"ty":{"Deduplicated":565}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":21},"end":{"line":741,"col":59}},"generated_from_span":null},"id":42,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":1}},"generics":{"regions":[{"Body":22},{"Body":23},{"Body":24}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":558}}},{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":561}}},{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":563}}}],"dest":{"kind":{"Local":11},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":43,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":44,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":45,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":59},"end":{"line":741,"col":60}},"generated_from_span":null},"id":46,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":8},"end":{"line":745,"col":9}},"generated_from_span":null},"id":47,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"id":48,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"id":49,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":571}},{"Ref":{"place":{"kind":{"Local":11},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":33}},"generated_from_span":null},"id":50,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":26}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":571}}}],"dest":{"kind":{"Local":16},"ty":{"Deduplicated":568}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":32},"end":{"line":745,"col":33}},"generated_from_span":null},"id":51,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":8},"end":{"line":746,"col":9}},"generated_from_span":null},"id":52,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"id":53,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"id":54,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":573}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":4},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":28}},"generated_from_span":null},"id":55,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":28}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":573}}}],"dest":{"kind":{"Local":18},"ty":{"Deduplicated":572}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":27},"end":{"line":746,"col":28}},"generated_from_span":null},"id":56,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":747,"col":8},"end":{"line":747,"col":17}},"generated_from_span":null},"id":57,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":747,"col":20},"end":{"line":747,"col":24}},"generated_from_span":null},"id":58,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":748,"col":8},"end":{"line":748,"col":13}},"generated_from_span":null},"id":59,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":748,"col":16},"end":{"line":748,"col":17}},"generated_from_span":null},"id":60,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":106,"kind":{"Loop":{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":62,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"id":63,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"id":64,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":65,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":105,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":15},"end":{"line":749,"col":16}},"generated_from_span":null},"id":66,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"id":68,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":69,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"id":70,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"id":71,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":482,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":483,"kind":{"Assign":[{"kind":{"Local":34},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":16},"ty":{"Deduplicated":568}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":484,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":485,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":34},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":26},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":35},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":74,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":35},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":75,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"id":76,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"id":77,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":486,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":487,"kind":{"Assign":[{"kind":{"Local":36},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":18},"ty":{"Deduplicated":572}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":488,"kind":{"StorageLive":37},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":489,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":36},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":28},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":37},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":80,"kind":{"Assign":[{"kind":{"Local":27},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":37},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"id":81,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":575}},{"BinaryOp":["Ne",{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"id":95,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":82,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":83,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":84,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":85,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":751,"col":12},"end":{"line":751,"col":25}},"generated_from_span":null},"id":86,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":89,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":90,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":91,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":92,"kind":{"StorageDead":25},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":752,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"id":96,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"id":98,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"id":100,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":754,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":102,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":103,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":104,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":15},"end":{"line":749,"col":16}},"generated_from_span":null},"id":107,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":754,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":111,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"id":113,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"id":114,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":20},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"id":128,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"id":115,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"id":116,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":372}},{"Aggregate":[{"Adt":[{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":8},"end":{"line":756,"col":14}},"generated_from_span":null},"id":117,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":380}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":372}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":13},"end":{"line":756,"col":14}},"generated_from_span":null},"id":118,"kind":{"StorageDead":31},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"id":120,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"id":121,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"id":122,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":611}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},3,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"id":123,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":611},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"HashConsedValue":[732,{"kind":{"TraitImpl":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":611}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":39},"end":{"line":758,"col":40}},"generated_from_span":null},"id":124,"kind":{"StorageDead":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":8},"end":{"line":758,"col":41}},"generated_from_span":null},"id":125,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":380}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":379}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":40},"end":{"line":758,"col":41}},"generated_from_span":null},"id":126,"kind":{"StorageDead":32},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":759,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"id":129,"kind":{"StorageDead":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":130,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":131,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":132,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":133,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":134,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":135,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":1},"end":{"line":760,"col":1}},"generated_from_span":null},"id":136,"kind":"Return","comments_before":[]}]},"comments":[[740,["(parameter named `sig`, not `signature`: the extractor's generated","code would otherwise shadow the `signature::` crate namespace)"]],[745,["AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes","through machinery the extractor cannot interpret). Semantics identical","to `expected_R == signature.R`."]]]}}},{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["recompute_r_sha512",0]}],"span":{"data":{"file_id":0,"beg":{"line":717,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn recompute_r_sha512(\n key: &VerifyingKey,\n sig: &InternalSignature,\n message: &[u8],\n) -> CompressedEdwardsY {\n let k = Scalar::from_bytes_mod_order_wide(&sha512_hash3(\n sig.R.as_bytes(),\n key.compressed.as_bytes(),\n message,\n ));\n\n let minus_A: EdwardsPoint = -key.point;\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &minus_A, &sig.s).compress()\n}","attr_info":{"attributes":[{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1421},{"HashConsedValue":[1424,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":413},"Shared"]}]},{"HashConsedValue":[1425,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":337},"Shared"]}]}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":717,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"bound_body_regions":51,"locals":{"arg_count":3,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":0,"beg":{"line":721,"col":5},"end":{"line":721,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":718,"col":4},"end":{"line":718,"col":7}},"generated_from_span":null},"ty":{"Deduplicated":383}},{"index":2,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":719,"col":4},"end":{"line":719,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[736,{"Ref":[{"Body":3},{"Deduplicated":413},"Shared"]}]}},{"index":3,"name":"message","span":{"data":{"file_id":0,"beg":{"line":720,"col":4},"end":{"line":720,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[738,{"Ref":[{"Body":5},{"Deduplicated":337},"Shared"]}]}},{"index":4,"name":"k","span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":722,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"HashConsedValue":[754,{"Ref":[{"Body":7},{"HashConsedValue":[752,{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}]}]},"Shared"]}]}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"HashConsedValue":[755,{"Ref":[{"Body":8},{"Deduplicated":752},"Shared"]}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"Deduplicated":752}},{"index":8,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[756,{"Ref":[{"Body":9},{"Deduplicated":337},"Shared"]}]}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[758,{"Ref":[{"Body":11},{"Deduplicated":566},"Shared"]}]}},{"index":10,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[567,{"Ref":[{"Body":12},{"Deduplicated":566},"Shared"]}]}},{"index":11,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"ty":{"HashConsedValue":[570,{"Ref":[{"Body":14},{"Deduplicated":557},"Shared"]}]}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[760,{"Ref":[{"Body":15},{"Deduplicated":337},"Shared"]}]}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":572}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[761,{"Ref":[{"Body":17},{"Deduplicated":566},"Shared"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"ty":{"HashConsedValue":[762,{"Ref":[{"Body":18},{"Deduplicated":557},"Shared"]}]}},{"index":16,"name":null,"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"ty":{"HashConsedValue":[763,{"Ref":[{"Body":19},{"Deduplicated":337},"Shared"]}]}},{"index":17,"name":"minus_A","span":{"data":{"file_id":0,"beg":{"line":728,"col":8},"end":{"line":728,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":18,"name":null,"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"ty":{"HashConsedValue":[775,{"Ref":[{"Body":21},{"Deduplicated":772},"Shared"]}]}},{"index":20,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":21,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[778,{"Ref":[{"Body":23},{"Deduplicated":748},"Shared"]}]}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[779,{"Ref":[{"Body":24},{"Deduplicated":748},"Shared"]}]}},{"index":23,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[780,{"Ref":[{"Body":25},{"Deduplicated":772},"Shared"]}]}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[781,{"Ref":[{"Body":26},{"Deduplicated":772},"Shared"]}]}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[782,{"Ref":[{"Body":27},{"Deduplicated":748},"Shared"]}]}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[783,{"Ref":[{"Body":28},{"Deduplicated":748},"Shared"]}]}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":730,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":722,"col":9}},"generated_from_span":null},"id":137,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":138,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":139,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"id":140,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":141,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":142,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":143,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"id":144,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"id":145,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":570}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":736}},"Deref"]},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":146,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":30}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":570}}}],"dest":{"kind":{"Local":10},"ty":{"Deduplicated":567}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":147,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":758}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":10},"ty":{"Deduplicated":567}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":148,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":758}}}],"dest":{"kind":{"Local":8},"ty":{"Deduplicated":756}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":23},"end":{"line":723,"col":24}},"generated_from_span":null},"id":149,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":23},"end":{"line":723,"col":24}},"generated_from_span":null},"id":150,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":151,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":152,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":153,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"id":154,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"id":155,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":762}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},{"Field":[{"Adt":[0,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":156,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":33}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":762}}}],"dest":{"kind":{"Local":14},"ty":{"Deduplicated":761}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":157,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":572}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":761}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":158,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":572}}}],"dest":{"kind":{"Local":12},"ty":{"Deduplicated":760}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":32},"end":{"line":724,"col":33}},"generated_from_span":null},"id":159,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":32},"end":{"line":724,"col":33}},"generated_from_span":null},"id":160,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"id":161,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"id":162,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":763}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":738}},"Deref"]},"ty":{"Deduplicated":337}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":738}},"PtrMetadata"]},"ty":{"Deduplicated":565}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"id":163,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":7}},"generics":{"regions":[{"Body":38},{"Body":39},{"Body":40}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":756}}},{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":760}}},{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":763}}}],"dest":{"kind":{"Local":7},"ty":{"Deduplicated":752}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":164,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":165,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":166,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":167,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":755}},{"Ref":{"place":{"kind":{"Local":7},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":168,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":754}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":6},"ty":{"Deduplicated":755}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":12},"end":{"line":726,"col":6}},"generated_from_span":null},"id":169,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":8}},"generics":{"regions":[{"Body":42}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":754}}}],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":748}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":5},"end":{"line":726,"col":6}},"generated_from_span":null},"id":170,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":171,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":172,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":173,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":174,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":8},"end":{"line":728,"col":15}},"generated_from_span":null},"id":175,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"id":176,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"id":177,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":772}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},{"Field":[{"Adt":[0,null]},1]}]},"ty":{"Deduplicated":772}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":32},"end":{"line":728,"col":42}},"generated_from_span":null},"id":178,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":9}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":772}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":772}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":41},"end":{"line":728,"col":42}},"generated_from_span":null},"id":179,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":180,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":181,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":182,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":183,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":184,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":779}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":185,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":778}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":22},"ty":{"Deduplicated":779}},"Deref"]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":186,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":187,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":188,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":781}},{"Ref":{"place":{"kind":{"Local":17},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":189,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":780}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":24},"ty":{"Deduplicated":781}},"Deref"]},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":190,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":191,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":192,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":783}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":736}},"Deref"]},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},1]}]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":193,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":782}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":26},"ty":{"Deduplicated":783}},"Deref"]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":194,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":10}},"generics":{"regions":[{"Body":46},{"Body":47},{"Body":48}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":21},"ty":{"Deduplicated":778}}},{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":780}}},{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":782}}}],"dest":{"kind":{"Local":20},"ty":{"Deduplicated":772}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":195,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":775}},{"Ref":{"place":{"kind":{"Local":20},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":196,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":197,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":198,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":86}},"generated_from_span":null},"id":199,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":11}},"generics":{"regions":[{"Body":50}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":775}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":85},"end":{"line":729,"col":86}},"generated_from_span":null},"id":200,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":201,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":202,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":203,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":204,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":205,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":206,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":1},"end":{"line":730,"col":1}},"generated_from_span":null},"id":207,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":2,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}},{"Ident":["try_from",0]}],"span":{"data":{"file_id":7,"beg":{"line":212,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"source_text":"fn try_from(sig: &ed25519::Signature) -> Result<InternalSignature, SignatureError> {\n InternalSignature::from_bytes(&sig.to_bytes())\n }","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1398,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":347},"Shared"]}]}],"output":{"Deduplicated":524}},"src":{"TraitImpl":{"impl_ref":{"id":0,"generics":{"regions":[{"Var":{"Free":0}}],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":1398},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":212,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"bound_body_regions":10,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":212,"col":45},"end":{"line":212,"col":86}},"generated_from_span":null},"ty":{"Deduplicated":524}},{"index":1,"name":"sig","span":{"data":{"file_id":7,"beg":{"line":212,"col":16},"end":{"line":212,"col":19}},"generated_from_span":null},"ty":{"HashConsedValue":[873,{"Ref":[{"Body":1},{"Deduplicated":347},"Shared"]}]}},{"index":2,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[875,{"Ref":[{"Body":3},{"Deduplicated":752},"Shared"]}]}},{"index":3,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[876,{"Ref":[{"Body":4},{"Deduplicated":752},"Shared"]}]}},{"index":4,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"Deduplicated":752}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":389}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":214,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":208,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":209,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"id":210,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"id":211,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"id":212,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":389}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":873}},"Deref"]},"ty":{"Deduplicated":347}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"id":213,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":12}},"generics":{"regions":[{"Body":7}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":389}}}],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":752}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":52},"end":{"line":213,"col":53}},"generated_from_span":null},"id":214,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":215,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":876}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":216,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":875}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":876}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":8},"end":{"line":213,"col":54}},"generated_from_span":null},"id":217,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":13}},"generics":{"regions":[{"Body":9}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":2},"ty":{"Deduplicated":875}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":53},"end":{"line":213,"col":54}},"generated_from_span":null},"id":218,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"id":219,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"id":220,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":5},"end":{"line":214,"col":5}},"generated_from_span":null},"id":221,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["branch",0]}],"span":{"data":{"file_id":3,"beg":{"line":2177,"col":4},"end":{"line":2177,"col":64}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1399,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}]}],"output":{"HashConsedValue":[1426,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1401,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":519},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":1},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":4,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":557},"kind":"InherentImplBlock"}}},{"Ident":["as_bytes",0]}],"span":{"data":{"file_id":11,"beg":{"line":180,"col":4},"end":{"line":180,"col":45}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" View this `CompressedEdwardsY` as an array of bytes."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1427,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":557},"Shared"]}]}],"output":{"HashConsedValue":[1428,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":566},"Shared"]}]}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}],"span":{"data":{"file_id":3,"beg":{"line":2192,"col":4},"end":{"line":2192,"col":70}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"},{"index":2,"name":"F"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":3,"beg":{"line":2187,"col":20},"end":{"line":2187,"col":35}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"HashConsedValue":[1404,{"TypeVar":{"Free":2}}]},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1401}],"output":{"HashConsedValue":[1405,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1406,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1404},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1405},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}},{"Ident":["into",0]}],"span":{"data":{"file_id":10,"beg":{"line":777,"col":4},"end":{"line":777,"col":22}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Calls `U::from(self)`."},{"DocComment":""},{"DocComment":" That is, this conversion is whatever the implementation of"},{"DocComment":" <code>[From]&lt;T&gt; for U</code> chooses to do."}],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"U"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":10,"beg":{"line":769,"col":7},"end":{"line":769,"col":22}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitImpl":{"impl_ref":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1407,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":7,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_hash3",0]}],"span":{"data":{"file_id":0,"beg":{"line":708,"col":0},"end":{"line":714,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn sha512_hash3(r: &[u8], a: &[u8], m: &[u8]) -> [u8; 64] {\n let mut h: Sha512 = Digest::new();\n Digest::update(&mut h, r);\n Digest::update(&mut h, a);\n Digest::update(&mut h, m);\n Digest::finalize(h).into()\n}","attr_info":{"attributes":[{"DocComment":" AENEAS-COMPAT: the whole three-part hash as ONE monomorphic call whose"},{"DocComment":" signature carries no foreign types (this fork's sha2-0.10 `Sha512` type"},{"DocComment":" alias cannot be declared opaque by the extractor). Semantically:"},{"DocComment":" `Sha512::new().chain(r).chain(a).chain(m).finalize()`."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1429,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":337},"Shared"]}]},{"Deduplicated":1422},{"Deduplicated":1425}],"output":{"Deduplicated":752}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":8,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}],"span":{"data":{"file_id":14,"beg":{"line":257,"col":4},"end":{"line":257,"col":64}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Construct a `Scalar` by reducing a 512-bit little-endian integer"},{"DocComment":" modulo the group order \\\\( \\ell \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1430,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":752},"Shared"]}]}],"output":{"Deduplicated":748}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":9,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["neg",0]}],"span":{"data":{"file_id":11,"beg":{"line":704,"col":4},"end":{"line":704,"col":32}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":772}],"output":{"Deduplicated":772}},"src":{"TraitImpl":{"impl_ref":{"id":6,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":772},{"Deduplicated":772}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":10,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":907,"col":4},"end":{"line":911,"col":21}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Compute \\\\(aA + bB\\\\) in variable time, where \\\\(B\\\\) is the Ed25519 basepoint."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1431,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":748},"Shared"]}]},{"HashConsedValue":[1432,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":772},"Shared"]}]},{"HashConsedValue":[1433,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":748},"Shared"]}]}],"output":{"Deduplicated":772}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":11,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}],"span":{"data":{"file_id":11,"beg":{"line":571,"col":4},"end":{"line":571,"col":48}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Compress this point to `CompressedEdwardsY` format."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1434,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":772},"Shared"]}]}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":12,"item_meta":{"name":[{"Ident":["ed25519",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":347},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}],"span":{"data":{"file_id":2,"beg":{"line":351,"col":4},"end":{"line":351,"col":44}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Return the inner byte array."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1398}],"output":{"Deduplicated":752}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":13,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":413},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}],"span":{"data":{"file_id":7,"beg":{"line":188,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"source_text":"pub fn from_bytes(bytes: &[u8; SIGNATURE_LENGTH]) -> Result<InternalSignature, SignatureError> {\n // TODO: Use bytes.split_array_ref once its in MSRV.\n // AENEAS-COMPAT (formal verification): plain index loops instead of\n // range-slicing + copy_from_slice — the SliceIndex const-generics\n // machinery defeats the extractor. Semantics identical.\n let mut R_bytes: [u8; 32] = [0u8; 32];\n let mut s_bytes: [u8; 32] = [0u8; 32];\n let mut i = 0;\n while i < 32 {\n R_bytes[i] = bytes[i];\n s_bytes[i] = bytes[i + 32];\n i += 1;\n }\n\n Ok(InternalSignature {\n R: compressed_from_bytes(R_bytes),\n s: check_scalar(s_bytes)?,\n })\n }","attr_info":{"attributes":[{"DocComment":" Construct a `Signature` from a slice of bytes."},{"DocComment":""},{"DocComment":" # Scalar Malleability Checking"},{"DocComment":""},{"DocComment":" As originally specified in the ed25519 paper (cf. the \"Malleability\""},{"DocComment":" section of the README in this repo), no checks whatsoever were performed"},{"DocComment":" for signature malleability."},{"DocComment":""},{"DocComment":" Later, a semi-functional, hacky check was added to most libraries to"},{"DocComment":" \"ensure\" that the scalar portion, `s`, of the signature was reduced `mod"},{"DocComment":" \\ell`, the order of the basepoint:"},{"DocComment":""},{"DocComment":" ```ignore"},{"DocComment":" if signature.s[31] & 224 != 0 {"},{"DocComment":" return Err();"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" This bit-twiddling ensures that the most significant three bits of the"},{"DocComment":" scalar are not set:"},{"DocComment":""},{"DocComment":" ```python,ignore"},{"DocComment":" >>> 0b00010000 & 224"},{"DocComment":" 0"},{"DocComment":" >>> 0b00100000 & 224"},{"DocComment":" 32"},{"DocComment":" >>> 0b01000000 & 224"},{"DocComment":" 64"},{"DocComment":" >>> 0b10000000 & 224"},{"DocComment":" 128"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" However, this check is hacky and insufficient to check that the scalar is"},{"DocComment":" fully reduced `mod \\ell = 2^252 + 27742317777372353535851937790883648493` as"},{"DocComment":" it leaves us with a guanteed bound of 253 bits. This means that there are"},{"DocComment":" `2^253 - 2^252 + 2774231777737235353585193779088364849311` remaining scalars"},{"DocComment":" which could cause malleabilllity."},{"DocComment":""},{"DocComment":" RFC8032 [states](https://tools.ietf.org/html/rfc8032#section-5.1.7):"},{"DocComment":""},{"DocComment":" > To verify a signature on a message M using public key A, [...]"},{"DocComment":" > first split the signature into two 32-octet halves. Decode the first"},{"DocComment":" > half as a point R, and the second half as an integer S, in the range"},{"DocComment":" > 0 <= s < L. Decode the public key A as point A'. If any of the"},{"DocComment":" > decodings fail (including S being out of range), the signature is"},{"DocComment":" > invalid."},{"DocComment":""},{"DocComment":" However, by the time this was standardised, most libraries in use were"},{"DocComment":" only checking the most significant three bits. (See also the"},{"DocComment":" documentation for [`crate::VerifyingKey::verify_strict`].)"},{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":"Hint","rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1430}],"output":{"Deduplicated":524}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":188,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"bound_body_regions":2,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":188,"col":57},"end":{"line":188,"col":98}},"generated_from_span":null},"ty":{"Deduplicated":524}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":188,"col":22},"end":{"line":188,"col":27}},"generated_from_span":null},"ty":{"HashConsedValue":[998,{"Ref":[{"Body":1},{"Deduplicated":752},"Shared"]}]}},{"index":2,"name":"R_bytes","span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":3,"name":"s_bytes","span":{"data":{"file_id":7,"beg":{"line":194,"col":12},"end":{"line":194,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":7,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"HashConsedValue":[1001,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":520},{"Deduplicated":748}],"const_generics":[],"trait_refs":[]}}}]}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"ty":{"HashConsedValue":[1004,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":23,"name":"residual","span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":25,"name":"val","span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1213,{"Ref":["Erased",{"Deduplicated":752},"Shared"]}]}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":28,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1215,{"Ref":["Erased",{"Deduplicated":566},"Mut"]}]}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1214,{"Ref":["Erased",{"Deduplicated":336},"Mut"]}]}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1213}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1215}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1214}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":206,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":225,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":228,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":230,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":36},"end":{"line":193,"col":45}},"generated_from_span":null},"id":231,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}}],"dest":{"kind":{"Local":2},"ty":{"Deduplicated":566}}}},"comments_before":["TODO: Use bytes.split_array_ref once its in MSRV.","AENEAS-COMPAT (formal verification): plain index loops instead of","range-slicing + copy_from_slice — the SliceIndex const-generics","machinery defeats the extractor. Semantics identical."]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":12},"end":{"line":194,"col":23}},"generated_from_span":null},"id":232,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":36},"end":{"line":194,"col":45}},"generated_from_span":null},"id":233,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}}],"dest":{"kind":{"Local":3},"ty":{"Deduplicated":566}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":17}},"generated_from_span":null},"id":234,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":20},"end":{"line":195,"col":21}},"generated_from_span":null},"id":235,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":283,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":237,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"id":238,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"id":239,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":240,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":282,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":19},"end":{"line":196,"col":20}},"generated_from_span":null},"id":241,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":242,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"id":243,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"id":244,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":490,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":491,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":1213}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":998}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":492,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":493,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":1213}}},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":247,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":27},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"id":248,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"id":249,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":494,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":495,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":1215}},{"Ref":{"place":{"kind":{"Local":2},"ty":{"Deduplicated":566}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":496,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":497,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":1215}}},{"Copy":{"kind":{"Local":9},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":29},"ty":{"Deduplicated":1214}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":252,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":29},"ty":{"Deduplicated":1214}},"Deref"]},"ty":{"Deduplicated":336}},{"Use":[{"Move":{"kind":{"Local":7},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":32},"end":{"line":197,"col":33}},"generated_from_span":null},"id":253,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":33},"end":{"line":197,"col":34}},"generated_from_span":null},"id":254,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":33},"end":{"line":197,"col":34}},"generated_from_span":null},"id":255,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":256,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":257,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"id":258,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"id":259,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":260,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":12},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":262,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":36},"end":{"line":198,"col":37}},"generated_from_span":null},"id":263,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":498,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":499,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":1213}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":998}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":500,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":501,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":1213}}},{"Copy":{"kind":{"Local":11},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":31},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":266,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":31},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"id":267,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"id":268,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":502,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":503,"kind":{"Assign":[{"kind":{"Local":32},"ty":{"Deduplicated":1215}},{"Ref":{"place":{"kind":{"Local":3},"ty":{"Deduplicated":566}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":504,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":505,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":1215}}},{"Copy":{"kind":{"Local":14},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":33},"ty":{"Deduplicated":1214}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":271,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":33},"ty":{"Deduplicated":1214}},"Deref"]},"ty":{"Deduplicated":336}},{"Use":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":37},"end":{"line":198,"col":38}},"generated_from_span":null},"id":272,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":38},"end":{"line":198,"col":39}},"generated_from_span":null},"id":273,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":38},"end":{"line":198,"col":39}},"generated_from_span":null},"id":274,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"id":275,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"id":277,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":279,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":280,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":281,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":19},"end":{"line":196,"col":20}},"generated_from_span":null},"id":284,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":288,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"id":290,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"id":291,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"id":292,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"id":293,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"id":294,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":19}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":44},"end":{"line":203,"col":45}},"generated_from_span":null},"id":295,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":296,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":297,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"id":298,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"id":299,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"id":300,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"id":301,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":20}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":21},"ty":{"Deduplicated":1004}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":35},"end":{"line":204,"col":36}},"generated_from_span":null},"id":302,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":303,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":21},"ty":{"Deduplicated":1004}}}],"dest":{"kind":{"Local":20},"ty":{"Deduplicated":1001}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":304,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":206,"col":5}},"generated_from_span":null},"id":323,"kind":{"Switch":{"Match":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},[[[0],{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":206,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":307,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":308,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":309,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":310,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":311,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"Deduplicated":709}]}}},"args":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":520}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":312,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":313,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":314,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":315,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":9},"end":{"line":205,"col":10}},"generated_from_span":null},"id":316,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":317,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":318,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":319,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":320,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":5},"end":{"line":206,"col":5}},"generated_from_span":null},"id":321,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":324,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":325,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":748}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":748}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":326,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":748}},{"Use":[{"Copy":{"kind":{"Local":25},"ty":{"Deduplicated":748}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":327,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"id":328,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":413}},{"Aggregate":[{"Adt":[{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":557}}},{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":748}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":329,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":330,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":8},"end":{"line":205,"col":10}},"generated_from_span":null},"id":331,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":524}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":413}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":9},"end":{"line":205,"col":10}},"generated_from_span":null},"id":332,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":333,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":334,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":335,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":336,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":5},"end":{"line":206,"col":5}},"generated_from_span":null},"id":337,"kind":"Return","comments_before":[]}]},"comments":[[193,["TODO: Use bytes.split_array_ref once its in MSRV.","AENEAS-COMPAT (formal verification): plain index loops instead of","range-slicing + copy_from_slice — the SliceIndex const-generics","machinery defeats the extractor. Semantics identical."]]]}}},{"def_id":14,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["from_output",0]}],"span":{"data":{"file_id":3,"beg":{"line":2172,"col":4},"end":{"line":2172,"col":48}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1399}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":15,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]},{"Ident":["from",0]}],"span":{"data":{"file_id":10,"beg":{"line":592,"col":4},"end":{"line":592,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Converts to this type from the input type."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_fn"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":16,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}},{"Ident":["from",0]}],"span":{"data":{"file_id":10,"beg":{"line":788,"col":4},"end":{"line":788,"col":22}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Returns the argument unchanged."}],"inline":"Always","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1394}},"src":{"TraitImpl":{"impl_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":17,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}],"span":{"data":{"file_id":13,"beg":{"line":111,"col":4},"end":{"line":113,"col":5}},"generated_from_span":null},"source_text":"fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":611}],"output":{"Deduplicated":379}},"src":{"TraitImpl":{"impl_ref":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":13,"beg":{"line":111,"col":4},"end":{"line":113,"col":5}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":13,"beg":{"line":111,"col":36},"end":{"line":111,"col":50}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":1,"name":"_err","span":{"data":{"file_id":13,"beg":{"line":111,"col":12},"end":{"line":111,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":611}}]},"body":{"span":{"data":{"file_id":13,"beg":{"line":113,"col":5},"end":{"line":113,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":13,"beg":{"line":112,"col":8},"end":{"line":112,"col":29}},"generated_from_span":null},"id":338,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":25}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":13,"beg":{"line":113,"col":5},"end":{"line":113,"col":5}},"generated_from_span":null},"id":339,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":18,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]},{"Ident":["try_from",0]}],"span":{"data":{"file_id":10,"beg":{"line":702,"col":4},"end":{"line":702,"col":55}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Performs the conversion."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"try_from_fn"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"},{"index":2,"name":"Clause0_Error"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1405}},"src":{"TraitDecl":{"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":19,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["compressed_from_bytes",0]}],"span":{"data":{"file_id":7,"beg":{"line":69,"col":0},"end":{"line":71,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn compressed_from_bytes(bytes: [u8; 32]) -> CompressedEdwardsY {\n CompressedEdwardsY(bytes)\n}","attr_info":{"attributes":[{"DocComment":" AENEAS-COMPAT (formal verification): opaque constructor — building the"},{"DocComment":" (extraction-opaque) `CompressedEdwardsY` aggregate directly cannot be"},{"DocComment":" interpreted by the extractor. Semantics: the tuple constructor."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":20,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}],"span":{"data":{"file_id":7,"beg":{"line":106,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"source_text":"fn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n /// = 2^252 + 27742317777372353535851937790883648493, little-endian.\n const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];\n // bytes < , most-significant byte first; the first differing byte decides.\n let mut lt = false;\n let mut decided = false;\n let mut i = 32;\n while i > 0 {\n let j = i - 1;\n if !decided {\n if bytes[j] < L_BYTES[j] {\n lt = true;\n decided = true;\n } else if bytes[j] > L_BYTES[j] {\n decided = true;\n }\n }\n i -= 1;\n }\n if lt {\n Ok(Scalar::from_bytes_mod_order(bytes))\n } else {\n Err(InternalError::ScalarFormat.into())\n }\n}","attr_info":{"attributes":[{"DocComment":" Ensures that the scalar `s` of a signature is within the bounds [0, )"},{"DocComment":""},{"DocComment":" AENEAS-COMPAT (formal verification): explicit little-endian comparison"},{"DocComment":" against followed by `from_bytes_mod_order` (the identity on canonical"},{"DocComment":" bytes) — value-level semantics identical to"},{"DocComment":" `Scalar::from_canonical_bytes(bytes).into()`; the subtle machinery's"},{"DocComment":" `black_box` internals defeat the extractor, and the verification path is"},{"DocComment":" variable-time throughout."}],"inline":"Always","rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":1004}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":106,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":106,"col":36},"end":{"line":106,"col":66}},"generated_from_span":null},"ty":{"Deduplicated":1004}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":106,"col":16},"end":{"line":106,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":2,"name":"lt","span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":3,"name":"decided","span":{"data":{"file_id":7,"beg":{"line":114,"col":8},"end":{"line":114,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":115,"col":8},"end":{"line":115,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":7,"name":"j","span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":117,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":23,"name":null,"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":25,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":26,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":27,"name":null,"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":28,"name":null,"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":34,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":35,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":36,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":133,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":341,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":346,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":347,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":17},"end":{"line":113,"col":22}},"generated_from_span":null},"id":348,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":["/ = 2^252 + 27742317777372353535851937790883648493, little-endian.","bytes < , most-significant byte first; the first differing byte decides."]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":8},"end":{"line":114,"col":19}},"generated_from_span":null},"id":349,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":22},"end":{"line":114,"col":27}},"generated_from_span":null},"id":350,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":8},"end":{"line":115,"col":13}},"generated_from_span":null},"id":351,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":18}},"generated_from_span":null},"id":352,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":449,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":354,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"id":355,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"id":356,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":357,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":575}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":448,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":14},"end":{"line":116,"col":15}},"generated_from_span":null},"id":358,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":117,"col":13}},"generated_from_span":null},"id":359,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"id":360,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"id":361,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"id":362,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"id":364,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":20},"end":{"line":117,"col":21}},"generated_from_span":null},"id":365,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"id":367,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"id":368,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"id":437,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"statements":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"id":370,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":371,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"id":372,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"id":373,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":514,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":515,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":516,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":517,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":13},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":34},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":376,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":34},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":377,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"id":378,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"id":379,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"id":380,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"id":381,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":518,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":519,"kind":{"Assign":[{"kind":{"Local":35},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":15},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":520,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":521,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":35},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":16},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":36},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":384,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":36},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"id":385,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":14},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":434,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":386,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":387,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":388,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":389,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":390,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":16},"end":{"line":120,"col":25}},"generated_from_span":null},"id":391,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":121,"col":16},"end":{"line":121,"col":30}},"generated_from_span":null},"id":392,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":395,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":396,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":397,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":398,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":399,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"id":400,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":401,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"id":402,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"id":403,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":506,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":507,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":508,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":509,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":19},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":30},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":406,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":30},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":407,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"id":408,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"id":409,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"id":410,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"id":411,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":510,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":511,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":21},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":512,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":513,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":22},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":414,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":32},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"id":415,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":575}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":20},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"id":431,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":416,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":417,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":418,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":419,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":420,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":123,"col":16},"end":{"line":123,"col":30}},"generated_from_span":null},"id":421,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":424,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":425,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":426,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":427,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":428,"kind":{"StorageDead":18},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":432,"kind":{"StorageDead":17},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":435,"kind":{"StorageDead":11},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":125,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"id":438,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"id":440,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"id":442,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":444,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":445,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":446,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":447,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":14},"end":{"line":116,"col":15}},"generated_from_span":null},"id":450,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":454,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"id":456,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"id":457,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"id":474,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"id":458,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"id":459,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"id":460,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":1},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"id":461,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":27}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":25},"ty":{"Deduplicated":748}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":45},"end":{"line":129,"col":46}},"generated_from_span":null},"id":462,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":8},"end":{"line":129,"col":47}},"generated_from_span":null},"id":463,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1004}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":748}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":46},"end":{"line":129,"col":47}},"generated_from_span":null},"id":464,"kind":{"StorageDead":25},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"id":466,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"id":467,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"id":468,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":611}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},1,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"id":469,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":611},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"Deduplicated":732}]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":611}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":45},"end":{"line":131,"col":46}},"generated_from_span":null},"id":470,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":8},"end":{"line":131,"col":47}},"generated_from_span":null},"id":471,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1004}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":379}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":46},"end":{"line":131,"col":47}},"generated_from_span":null},"id":472,"kind":{"StorageDead":27},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":132,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"id":475,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":476,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":477,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":478,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":1},"end":{"line":133,"col":1}},"generated_from_span":null},"id":479,"kind":"Return","comments_before":[]}]},"comments":[[108,["/ = 2^252 + 27742317777372353535851937790883648493, little-endian."]],[113,["bytes < , most-significant byte first; the first differing byte decides."]]]}}},{"def_id":21,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}],"span":{"data":{"file_id":15,"beg":{"line":192,"col":4},"end":{"line":192,"col":49}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Constructs the type from its `Output` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method"},{"DocComment":" such that applying the `?` operator will get back the original value:"},{"DocComment":" `Try::from_output(x).branch() --> ControlFlow::Continue(x)`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::Try;"},{"DocComment":""},{"DocComment":" assert_eq!(<Result<_, String> as Try>::from_output(3), Ok(3));"},{"DocComment":" assert_eq!(<Option<_> as Try>::from_output(4), Some(4));"},{"DocComment":" assert_eq!("},{"DocComment":" <std::ops::ControlFlow<String, _> as Try>::from_output(5),"},{"DocComment":" std::ops::ControlFlow::Continue(5),"},{"DocComment":" );"},{"DocComment":""},{"DocComment":" # fn make_question_mark_work() -> Option<()> {"},{"DocComment":" assert_eq!(Option::from_output(4)?, 4);"},{"DocComment":" # None }"},{"DocComment":" # make_question_mark_work();"},{"DocComment":""},{"DocComment":" // This is used, for example, on the accumulator in `try_fold`:"},{"DocComment":" let r = std::iter::empty().try_fold(4, |_, ()| -> Option<_> { unreachable!() });"},{"DocComment":" assert_eq!(r, Some(4));"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_output"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1436,{"TraitType":[{"HashConsedValue":[1435,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":22,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}],"span":{"data":{"file_id":15,"beg":{"line":219,"col":4},"end":{"line":219,"col":65}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used in `?` to decide whether the operator should produce a value"},{"DocComment":" (because this returned [`ControlFlow::Continue`])"},{"DocComment":" or propagate a value back to the caller"},{"DocComment":" (because this returned [`ControlFlow::Break`])."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, Try};"},{"DocComment":""},{"DocComment":" assert_eq!(Ok::<_, String>(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(Err::<String, _>(3).branch(), ControlFlow::Break(Err(3)));"},{"DocComment":""},{"DocComment":" assert_eq!(Some(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(None::<String>.branch(), ControlFlow::Break(None));"},{"DocComment":""},{"DocComment":" assert_eq!(ControlFlow::<String, _>::Continue(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::Break(3).branch(),"},{"DocComment":" ControlFlow::Break(ControlFlow::Break(3)),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"branch"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"HashConsedValue":[1438,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1437,{"TraitType":[{"Deduplicated":1435},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"Deduplicated":1436}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitDecl":{"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":1},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":23,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}],"span":{"data":{"file_id":15,"beg":{"line":333,"col":4},"end":{"line":333,"col":42}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Constructs the type from a compatible `Residual` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method such"},{"DocComment":" that applying the `?` operator will get back an equivalent residual:"},{"DocComment":" `FromResidual::from_residual(r).branch() --> ControlFlow::Break(r)`."},{"DocComment":" (The residual is not mandated to be *identical* when interconversion is involved.)"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, FromResidual};"},{"DocComment":""},{"DocComment":" assert_eq!(Result::<String, i64>::from_residual(Err(3_u8)), Err(3));"},{"DocComment":" assert_eq!(Option::<String>::from_residual(None), None);"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::from_residual(ControlFlow::Break(5)),"},{"DocComment":" ControlFlow::Break(5),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_residual"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"R"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":24,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]},{"Ident":["into",0]}],"span":{"data":{"file_id":10,"beg":{"line":454,"col":4},"end":{"line":454,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Converts this type into the (usually inferred) input type."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitDecl":{"trait_ref":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":25,"item_meta":{"name":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":379},"kind":"InherentImplBlock"}}},{"Ident":["new",0]}],"span":{"data":{"file_id":5,"beg":{"line":34,"col":4},"end":{"line":34,"col":24}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Create a new error with no associated source"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[],"output":{"Deduplicated":379}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":26,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["neg",0]}],"span":{"data":{"file_id":16,"beg":{"line":706,"col":4},"end":{"line":706,"col":33}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Performs the unary `-` operation."},{"DocComment":""},{"DocComment":" # Example"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let x: i32 = 12;"},{"DocComment":" assert_eq!(-x, -12);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"neg"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"Clause0_Output"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitDecl":{"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":27,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}],"span":{"data":{"file_id":14,"beg":{"line":244,"col":4},"end":{"line":244,"col":58}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Construct a `Scalar` by reducing a 256-bit little-endian integer"},{"DocComment":" modulo the group order \\\\( \\ell \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":748}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":28,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}],"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"source_text":"const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];","attr_info":{"attributes":[{"DocComment":" = 2^252 + 27742317777372353535851937790883648493, little-endian."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[],"output":{"Deduplicated":566}},"src":"TopLevel","is_global_initializer":1,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":0,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":108,"col":19},"end":{"line":108,"col":27}},"generated_from_span":null},"ty":{"Deduplicated":566}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":108,"col":30},"end":{"line":111,"col":5}},"generated_from_span":null},"id":480,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":566}},{"Aggregate":[{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}]},[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","237"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","211"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","245"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","92"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","26"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","99"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","18"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","88"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","214"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","156"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","247"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","162"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","249"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","20"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","16"]}}},"ty":{"Deduplicated":336}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"id":481,"kind":"Return","comments_before":[]}]},"comments":[]}}}],"global_decls":[null,{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}],"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"source_text":"const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];","attr_info":{"attributes":[{"DocComment":" = 2^252 + 27742317777372353535851937790883648493, little-endian."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"ty":{"Deduplicated":566},"src":"TopLevel","global_kind":"NamedConst","value":{"kind":{"Call":[{"kind":{"Fun":{"Regular":28}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},[]]},"ty":{"Deduplicated":566}}}],"trait_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]}],"span":{"data":{"file_id":10,"beg":{"line":587,"col":0},"end":{"line":587,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to do value-to-value conversions while consuming the input value. It is the reciprocal of"},{"DocComment":" [`Into`]."},{"DocComment":""},{"DocComment":" One should always prefer implementing `From` over [`Into`]"},{"DocComment":" because implementing `From` automatically provides one with an implementation of [`Into`]"},{"DocComment":" thanks to the blanket implementation in the standard library."},{"DocComment":""},{"DocComment":" Only implement [`Into`] when targeting a version prior to Rust 1.41 and converting to a type"},{"DocComment":" outside the current crate."},{"DocComment":" `From` was not able to do these types of conversions in earlier versions because of Rust's"},{"DocComment":" orphaning rules."},{"DocComment":" See [`Into`] for more details."},{"DocComment":""},{"DocComment":" Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`Into`] can be used as well."},{"DocComment":""},{"DocComment":" The `From` trait is also very useful when performing error handling. When constructing a function"},{"DocComment":" that is capable of failing, the return type will generally be of the form `Result<T, E>`."},{"DocComment":" `From` simplifies error handling by allowing a function to return a single error type"},{"DocComment":" that encapsulates multiple error types. See the \"Examples\" section and [the book][book] for more"},{"DocComment":" details."},{"DocComment":""},{"DocComment":" **Note: This trait must not fail**. The `From` trait is intended for perfect conversions."},{"DocComment":" If the conversion can fail or is not perfect, use [`TryFrom`]."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - `From<T> for U` implies [`Into`]`<U> for T`"},{"DocComment":" - `From` is reflexive, which means that `From<T> for T` is implemented"},{"DocComment":""},{"DocComment":" # When to implement `From`"},{"DocComment":""},{"DocComment":" While there's no technical restrictions on which conversions can be done using"},{"DocComment":" a `From` implementation, the general expectation is that the conversions"},{"DocComment":" should typically be restricted as follows:"},{"DocComment":""},{"DocComment":" * The conversion is *infallible*: if the conversion can fail, use [`TryFrom`]"},{"DocComment":" instead; don't provide a `From` impl that panics."},{"DocComment":""},{"DocComment":" * The conversion is *lossless*: semantically, it should not lose or discard"},{"DocComment":" information. For example, `i32: From<u16>` exists, where the original"},{"DocComment":" value can be recovered using `u16: TryFrom<i32>`. And `String: From<&str>`"},{"DocComment":" exists, where you can get something equivalent to the original value via"},{"DocComment":" `Deref`. But `From` cannot be used to convert from `u32` to `u16`, since"},{"DocComment":" that cannot succeed in a lossless way. (There's some wiggle room here for"},{"DocComment":" information not considered semantically relevant. For example,"},{"DocComment":" `Box<[T]>: From<Vec<T>>` exists even though it might not preserve capacity,"},{"DocComment":" like how two vectors can be equal despite differing capacities.)"},{"DocComment":""},{"DocComment":" * The conversion is *value-preserving*: the conceptual kind and meaning of"},{"DocComment":" the resulting value is the same, even though the Rust type and technical"},{"DocComment":" representation might be different. For example `-1_i8 as u8` is *lossless*,"},{"DocComment":" since `as` casting back can recover the original value, but that conversion"},{"DocComment":" is *not* available via `From` because `-1` and `255` are different conceptual"},{"DocComment":" values (despite being identical bit patterns technically). But"},{"DocComment":" `f32: From<i16>` *is* available because `1_i16` and `1.0_f32` are conceptually"},{"DocComment":" the same real number (despite having very different bit patterns technically)."},{"DocComment":" `String: From<char>` is available because they're both *text*, but"},{"DocComment":" `String: From<u32>` is *not* available, since `1` (a number) and `\"1\"`"},{"DocComment":" (text) are too different. (Converting values to text is instead covered"},{"DocComment":" by the [`Display`](crate::fmt::Display) trait.)"},{"DocComment":""},{"DocComment":" * The conversion is *obvious*: it's the only reasonable conversion between"},{"DocComment":" the two types. Otherwise it's better to have it be a named method or"},{"DocComment":" constructor, like how [`str::as_bytes`] is a method and how integers have"},{"DocComment":" methods like [`u32::from_ne_bytes`], [`u32::from_le_bytes`], and"},{"DocComment":" [`u32::from_be_bytes`], none of which are `From` implementations. Whereas"},{"DocComment":" there's only one reasonable way to wrap an [`Ipv6Addr`](crate::net::Ipv6Addr)"},{"DocComment":" into an [`IpAddr`](crate::net::IpAddr), thus `IpAddr: From<Ipv6Addr>` exists."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" [`String`] implements `From<&str>`:"},{"DocComment":""},{"DocComment":" An explicit conversion from a `&str` to a String is done as follows:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let string = \"hello\".to_string();"},{"DocComment":" let other_string = String::from(\"hello\");"},{"DocComment":""},{"DocComment":" assert_eq!(string, other_string);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" While performing error handling it is often useful to implement `From` for your own error type."},{"DocComment":" By converting underlying error types to our own custom error type that encapsulates the"},{"DocComment":" underlying error type, we can return a single error type without losing information on the"},{"DocComment":" underlying cause. The '?' operator automatically converts the underlying error type to our"},{"DocComment":" custom error type with `From::from`."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" use std::fs;"},{"DocComment":" use std::io;"},{"DocComment":" use std::num;"},{"DocComment":""},{"DocComment":" enum CliError {"},{"DocComment":" IoError(io::Error),"},{"DocComment":" ParseError(num::ParseIntError),"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl From<io::Error> for CliError {"},{"DocComment":" fn from(error: io::Error) -> Self {"},{"DocComment":" CliError::IoError(error)"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl From<num::ParseIntError> for CliError {"},{"DocComment":" fn from(error: num::ParseIntError) -> Self {"},{"DocComment":" CliError::ParseError(error)"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" fn open_and_parse_file(file_name: &str) -> Result<i32, CliError> {"},{"DocComment":" let mut contents = fs::read_to_string(&file_name)?;"},{"DocComment":" let num: i32 = contents.trim().parse()?;"},{"DocComment":" Ok(num)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`String`]: ../../std/string/struct.String.html"},{"DocComment":" [`from`]: From::from"},{"DocComment":" [book]: ../../book/ch09-00-error-handling.html"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"From"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from","attr_info":{"attributes":[{"DocComment":" Converts to this type from the input type."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"item":{"id":15,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1409,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":1,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]}],"span":{"data":{"file_id":10,"beg":{"line":694,"col":0},"end":{"line":694,"col":33}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Simple and safe type conversions that may fail in a controlled"},{"DocComment":" way under some circumstances. It is the reciprocal of [`TryInto`]."},{"DocComment":""},{"DocComment":" This is useful when you are doing a type conversion that may"},{"DocComment":" trivially succeed but may also need special handling."},{"DocComment":" For example, there is no way to convert an [`i64`] into an [`i32`]"},{"DocComment":" using the [`From`] trait, because an [`i64`] may contain a value"},{"DocComment":" that an [`i32`] cannot represent and so the conversion would lose data."},{"DocComment":" This might be handled by truncating the [`i64`] to an [`i32`] or by"},{"DocComment":" simply returning [`i32::MAX`], or by some other method. The [`From`]"},{"DocComment":" trait is intended for perfect conversions, so the `TryFrom` trait"},{"DocComment":" informs the programmer when a type conversion could go bad and lets"},{"DocComment":" them decide how to handle it."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - `TryFrom<T> for U` implies [`TryInto`]`<U> for T`"},{"DocComment":" - [`try_from`] is reflexive, which means that `TryFrom<T> for T`"},{"DocComment":" is implemented and cannot fail -- the associated `Error` type for"},{"DocComment":" calling `T::try_from()` on a value of type `T` is [`Infallible`]."},{"DocComment":" When the [`!`] type is stabilized [`Infallible`] and [`!`] will be"},{"DocComment":" equivalent."},{"DocComment":""},{"DocComment":" Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`TryInto`] can be used as well."},{"DocComment":""},{"DocComment":" `TryFrom<T>` can be implemented as follows:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" struct GreaterThanZero(i32);"},{"DocComment":""},{"DocComment":" impl TryFrom<i32> for GreaterThanZero {"},{"DocComment":" type Error = &'static str;"},{"DocComment":""},{"DocComment":" fn try_from(value: i32) -> Result<Self, Self::Error> {"},{"DocComment":" if value <= 0 {"},{"DocComment":" Err(\"GreaterThanZero only accepts values greater than zero!\")"},{"DocComment":" } else {"},{"DocComment":" Ok(GreaterThanZero(value))"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" As described, [`i32`] implements `TryFrom<`[`i64`]`>`:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let big_number = 1_000_000_000_000i64;"},{"DocComment":" // Silently truncates `big_number`, requires detecting"},{"DocComment":" // and handling the truncation after the fact."},{"DocComment":" let smaller_number = big_number as i32;"},{"DocComment":" assert_eq!(smaller_number, -727379968);"},{"DocComment":""},{"DocComment":" // Returns an error because `big_number` is too big to"},{"DocComment":" // fit in an `i32`."},{"DocComment":" let try_smaller_number = i32::try_from(big_number);"},{"DocComment":" assert!(try_smaller_number.is_err());"},{"DocComment":""},{"DocComment":" // Returns `Ok(3)`."},{"DocComment":" let try_successful_smaller_number = i32::try_from(3);"},{"DocComment":" assert!(try_successful_smaller_number.is_ok());"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`try_from`]: TryFrom::try_from"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"TryFrom"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"},{"index":2,"name":"Self_Error"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"try_from","attr_info":{"attributes":[{"DocComment":" Performs the conversion."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1405}},"item":{"id":18,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1410,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}],"span":{"data":{"file_id":15,"beg":{"line":133,"col":0},"end":{"line":133,"col":41}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The `?` operator and `try {}` blocks."},{"DocComment":""},{"DocComment":" `try_*` methods typically involve a type implementing this trait. For"},{"DocComment":" example, the closures passed to [`Iterator::try_fold`] and"},{"DocComment":" [`Iterator::try_for_each`] must return such a type."},{"DocComment":""},{"DocComment":" `Try` types are typically those containing two or more categories of values,"},{"DocComment":" some subset of which are so commonly handled via early returns that it's"},{"DocComment":" worth providing a terse (but still visible) syntax to make that easy."},{"DocComment":""},{"DocComment":" This is most often seen for error handling with [`Result`] and [`Option`]."},{"DocComment":" The quintessential implementation of this trait is on [`ControlFlow`]."},{"DocComment":""},{"DocComment":" # Using `Try` in Generic Code"},{"DocComment":""},{"DocComment":" `Iterator::try_fold` was stabilized to call back in Rust 1.27, but"},{"DocComment":" this trait is much newer. To illustrate the various associated types and"},{"DocComment":" methods, let's implement our own version."},{"DocComment":""},{"DocComment":" As a reminder, an infallible version of a fold looks something like this:"},{"DocComment":" ```"},{"DocComment":" fn simple_fold<A, T>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> A,"},{"DocComment":" ) -> A {"},{"DocComment":" for x in iter {"},{"DocComment":" accum = f(accum, x);"},{"DocComment":" }"},{"DocComment":" accum"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" So instead of `f` returning just an `A`, we'll need it to return some other"},{"DocComment":" type that produces an `A` in the \"don't short circuit\" path. Conveniently,"},{"DocComment":" that's also the type we need to return from the function."},{"DocComment":""},{"DocComment":" Let's add a new generic parameter `R` for that type, and bound it to the"},{"DocComment":" output type that we want:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::Try;"},{"DocComment":" fn simple_try_fold_1<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" todo!()"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" If we get through the entire iterator, we need to wrap up the accumulator"},{"DocComment":" into the return type using [`Try::from_output`]:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::{ControlFlow, Try};"},{"DocComment":" fn simple_try_fold_2<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" let cf = f(accum, x).branch();"},{"DocComment":" match cf {"},{"DocComment":" ControlFlow::Continue(a) => accum = a,"},{"DocComment":" ControlFlow::Break(_) => todo!(),"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" We'll also need [`FromResidual::from_residual`] to turn the residual back"},{"DocComment":" into the original type. But because it's a supertrait of `Try`, we don't"},{"DocComment":" need to mention it in the bounds. All types which implement `Try` can be"},{"DocComment":" recreated from their corresponding residual, so we'll just call it:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::{ControlFlow, Try};"},{"DocComment":" pub fn simple_try_fold_3<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" let cf = f(accum, x).branch();"},{"DocComment":" match cf {"},{"DocComment":" ControlFlow::Continue(a) => accum = a,"},{"DocComment":" ControlFlow::Break(r) => return R::from_residual(r),"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" But this \"call `branch`, then `match` on it, and `return` if it was a"},{"DocComment":" `Break`\" is exactly what happens inside the `?` operator. So rather than"},{"DocComment":" do all this manually, we can just use `?` instead:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::Try;"},{"DocComment":" fn simple_try_fold<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" accum = f(accum, x)?;"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Try"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[{"clause_id":0,"span":{"data":{"file_id":15,"beg":{"line":133,"col":21},"end":{"line":133,"col":41}},"generated_from_span":null},"origin":"WhereClauseOnTrait","trait_":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"HashConsedValue":[1412,{"TraitType":[{"HashConsedValue":[1411,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"const_generics":[],"trait_refs":[]}}}},{"clause_id":1,"span":{"data":{"file_id":15,"beg":{"line":160,"col":19},"end":{"line":160,"col":41}},"generated_from_span":null},"origin":{"TraitItem":1},"trait_":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1412},{"HashConsedValue":[1413,{"TraitType":[{"Deduplicated":1411},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"HashConsedValue":[1414,{"TraitType":[{"Deduplicated":1411},2,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"const_generics":[],"trait_refs":[]}}}}],"consts":[],"types":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Output","attr_info":{"attributes":[{"DocComment":" The type of the value produced by `?` when *not* short-circuiting."}],"inline":null,"rename":null,"public":false},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Residual","attr_info":{"attributes":[{"DocComment":" The type of the value passed to [`FromResidual::from_residual`]"},{"DocComment":" as part of `?` when short-circuiting."},{"DocComment":""},{"DocComment":" This represents the possible values of the `Self` type which are *not*"},{"DocComment":" represented by the `Output` type."},{"DocComment":""},{"DocComment":" # Note to Implementors"},{"DocComment":""},{"DocComment":" The choice of this type is critical to interconversion."},{"DocComment":" Unlike the `Output` type, which will often be a raw generic type,"},{"DocComment":" this type is typically a newtype of some sort to \"color\" the type"},{"DocComment":" so that it's distinguishable from the residuals of other types."},{"DocComment":""},{"DocComment":" This is why `Result<T, E>::Residual` is not `E`, but `Result<Infallible, E>`."},{"DocComment":" That way it's distinct from `ControlFlow<E>::Residual`, for example,"},{"DocComment":" and thus `?` on `ControlFlow` cannot be used in a method returning `Result`."},{"DocComment":""},{"DocComment":" If you're making a generic type `Foo<T>` that implements `Try<Output = T>`,"},{"DocComment":" then typically you can use `Foo<std::convert::Infallible>` as its `Residual`"},{"DocComment":" type: that type will have a \"hole\" in the correct place, and will maintain the"},{"DocComment":" \"foo-ness\" of the residual so other types need to opt-in to interconversion."}],"inline":null,"rename":null,"public":false},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,1]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Self_Clause1_TryType","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,2]}}],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from_output","attr_info":{"attributes":[{"DocComment":" Constructs the type from its `Output` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method"},{"DocComment":" such that applying the `?` operator will get back the original value:"},{"DocComment":" `Try::from_output(x).branch() --> ControlFlow::Continue(x)`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::Try;"},{"DocComment":""},{"DocComment":" assert_eq!(<Result<_, String> as Try>::from_output(3), Ok(3));"},{"DocComment":" assert_eq!(<Option<_> as Try>::from_output(4), Some(4));"},{"DocComment":" assert_eq!("},{"DocComment":" <std::ops::ControlFlow<String, _> as Try>::from_output(5),"},{"DocComment":" std::ops::ControlFlow::Continue(5),"},{"DocComment":" );"},{"DocComment":""},{"DocComment":" # fn make_question_mark_work() -> Option<()> {"},{"DocComment":" assert_eq!(Option::from_output(4)?, 4);"},{"DocComment":" # None }"},{"DocComment":" # make_question_mark_work();"},{"DocComment":""},{"DocComment":" // This is used, for example, on the accumulator in `try_fold`:"},{"DocComment":" let r = std::iter::empty().try_fold(4, |_, ()| -> Option<_> { unreachable!() });"},{"DocComment":" assert_eq!(r, Some(4));"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1413}],"output":{"Deduplicated":1394}},"item":{"id":21,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[{"Deduplicated":1411}]}}},"kind":{"TraitMethod":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"branch","attr_info":{"attributes":[{"DocComment":" Used in `?` to decide whether the operator should produce a value"},{"DocComment":" (because this returned [`ControlFlow::Continue`])"},{"DocComment":" or propagate a value back to the caller"},{"DocComment":" (because this returned [`ControlFlow::Break`])."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, Try};"},{"DocComment":""},{"DocComment":" assert_eq!(Ok::<_, String>(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(Err::<String, _>(3).branch(), ControlFlow::Break(Err(3)));"},{"DocComment":""},{"DocComment":" assert_eq!(Some(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(None::<String>.branch(), ControlFlow::Break(None));"},{"DocComment":""},{"DocComment":" assert_eq!(ControlFlow::<String, _>::Continue(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::Break(3).branch(),"},{"DocComment":" ControlFlow::Break(ControlFlow::Break(3)),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"HashConsedValue":[1415,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":1412},{"Deduplicated":1413}],"const_generics":[],"trait_refs":[]}}}]}},"item":{"id":22,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[{"Deduplicated":1411}]}}},"kind":{"TraitMethod":[2,1]}}],"vtable":null},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}],"span":{"data":{"file_id":15,"beg":{"line":310,"col":0},"end":{"line":310,"col":57}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to specify which residuals can be converted into which [`crate::ops::Try`] types."},{"DocComment":""},{"DocComment":" Every `Try` type needs to be recreatable from its own associated"},{"DocComment":" `Residual` type, but can also have additional `FromResidual` implementations"},{"DocComment":" to support interconversion with other `Try` types."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"FromResidual"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"R"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from_residual","attr_info":{"attributes":[{"DocComment":" Constructs the type from a compatible `Residual` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method such"},{"DocComment":" that applying the `?` operator will get back an equivalent residual:"},{"DocComment":" `FromResidual::from_residual(r).branch() --> ControlFlow::Break(r)`."},{"DocComment":" (The residual is not mandated to be *identical* when interconversion is involved.)"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, FromResidual};"},{"DocComment":""},{"DocComment":" assert_eq!(Result::<String, i64>::from_residual(Err(3_u8)), Err(3));"},{"DocComment":" assert_eq!(Option::<String>::from_residual(None), None);"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::from_residual(ControlFlow::Break(5)),"},{"DocComment":" ControlFlow::Break(5),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"item":{"id":23,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1416,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[3,0]}}],"vtable":null},{"def_id":4,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}],"span":{"data":{"file_id":15,"beg":{"line":364,"col":0},"end":{"line":364,"col":34}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Allows retrieving the canonical type implementing [`Try`] that has this type"},{"DocComment":" as its residual and allows it to hold an `O` as its output."},{"DocComment":""},{"DocComment":" If you think of the `Try` trait as splitting a type into its [`Try::Output`]"},{"DocComment":" and [`Try::Residual`] components, this allows putting them back together."},{"DocComment":""},{"DocComment":" For example,"},{"DocComment":" `Result<T, E>: Try<Output = T, Residual = Result<Infallible, E>>`,"},{"DocComment":" and in the other direction,"},{"DocComment":" `<Result<Infallible, E> as Residual<T>>::TryType = Result<T, E>`."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"O"},{"index":2,"name":"Self_TryType"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[{"regions":[],"skip_binder":{"trait_ref":{"HashConsedValue":[1418,{"kind":{"ParentClause":[{"HashConsedValue":[1417,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]},0]},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]},"type_id":0,"ty":{"Deduplicated":1395}}},{"regions":[],"skip_binder":{"trait_ref":{"Deduplicated":1418},"type_id":1,"ty":{"Deduplicated":1394}}}]},"implied_clauses":[{"clause_id":0,"span":{"data":{"file_id":15,"beg":{"line":368,"col":18},"end":{"line":368,"col":58}},"generated_from_span":null},"origin":{"TraitItem":0},"trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}],"consts":[],"types":[null],"methods":[],"vtable":null},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]}],"span":{"data":{"file_id":10,"beg":{"line":450,"col":0},"end":{"line":450,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" A value-to-value conversion that consumes the input value. The"},{"DocComment":" opposite of [`From`]."},{"DocComment":""},{"DocComment":" One should avoid implementing [`Into`] and implement [`From`] instead."},{"DocComment":" Implementing [`From`] automatically provides one with an implementation of [`Into`]"},{"DocComment":" thanks to the blanket implementation in the standard library."},{"DocComment":""},{"DocComment":" Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`Into`] can be used as well."},{"DocComment":""},{"DocComment":" **Note: This trait must not fail**. If the conversion can fail, use [`TryInto`]."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - [`From`]`<T> for U` implies `Into<U> for T`"},{"DocComment":" - [`Into`] is reflexive, which means that `Into<T> for T` is implemented"},{"DocComment":""},{"DocComment":" # Implementing [`Into`] for conversions to external types in old versions of Rust"},{"DocComment":""},{"DocComment":" Prior to Rust 1.41, if the destination type was not part of the current crate"},{"DocComment":" then you couldn't implement [`From`] directly."},{"DocComment":" For example, take this code:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" # #![allow(non_local_definitions)]"},{"DocComment":" struct Wrapper<T>(Vec<T>);"},{"DocComment":" impl<T> From<Wrapper<T>> for Vec<T> {"},{"DocComment":" fn from(w: Wrapper<T>) -> Vec<T> {"},{"DocComment":" w.0"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":" This will fail to compile in older versions of the language because Rust's orphaning rules"},{"DocComment":" used to be a little bit more strict. To bypass this, you could implement [`Into`] directly:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" struct Wrapper<T>(Vec<T>);"},{"DocComment":" impl<T> Into<Vec<T>> for Wrapper<T> {"},{"DocComment":" fn into(self) -> Vec<T> {"},{"DocComment":" self.0"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" It is important to understand that [`Into`] does not provide a [`From`] implementation"},{"DocComment":" (as [`From`] does with [`Into`]). Therefore, you should always try to implement [`From`]"},{"DocComment":" and then fall back to [`Into`] if [`From`] can't be implemented."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" [`String`] implements [`Into`]`<`[`Vec`]`<`[`u8`]`>>`:"},{"DocComment":""},{"DocComment":" In order to express that we want a generic function to take all arguments that can be"},{"DocComment":" converted to a specified type `T`, we can use a trait bound of [`Into`]`<T>`."},{"DocComment":" For example: The function `is_hello` takes all arguments that can be converted into a"},{"DocComment":" [`Vec`]`<`[`u8`]`>`."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" fn is_hello<T: Into<Vec<u8>>>(s: T) {"},{"DocComment":" let bytes = b\"hello\".to_vec();"},{"DocComment":" assert_eq!(bytes, s.into());"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" let s = \"hello\".to_string();"},{"DocComment":" is_hello(s);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`String`]: ../../std/string/struct.String.html"},{"DocComment":" [`Vec`]: ../../std/vec/struct.Vec.html"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Into"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"into","attr_info":{"attributes":[{"DocComment":" Converts this type into the (usually inferred) input type."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"item":{"id":24,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1419,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[5,0]}}],"vtable":null},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]}],"span":{"data":{"file_id":16,"beg":{"line":690,"col":0},"end":{"line":690,"col":19}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The unary negation operator `-`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" An implementation of `Neg` for `Sign`, which allows the use of `-` to"},{"DocComment":" negate its value."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" use std::ops::Neg;"},{"DocComment":""},{"DocComment":" #[derive(Debug, PartialEq)]"},{"DocComment":" enum Sign {"},{"DocComment":" Negative,"},{"DocComment":" Zero,"},{"DocComment":" Positive,"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl Neg for Sign {"},{"DocComment":" type Output = Self;"},{"DocComment":""},{"DocComment":" fn neg(self) -> Self::Output {"},{"DocComment":" match self {"},{"DocComment":" Sign::Negative => Sign::Positive,"},{"DocComment":" Sign::Zero => Sign::Zero,"},{"DocComment":" Sign::Positive => Sign::Negative,"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" // A negative positive is a negative."},{"DocComment":" assert_eq!(-Sign::Positive, Sign::Negative);"},{"DocComment":" // A double negative is a positive."},{"DocComment":" assert_eq!(-Sign::Negative, Sign::Positive);"},{"DocComment":" // Zero is its own negation."},{"DocComment":" assert_eq!(-Sign::Zero, Sign::Zero);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"neg"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"Self_Output"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"neg","attr_info":{"attributes":[{"DocComment":" Performs the unary `-` operation."},{"DocComment":""},{"DocComment":" # Example"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let x: i32 = 12;"},{"DocComment":" assert_eq!(-x, -12);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"item":{"id":26,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1420,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[6,0]}}],"vtable":{"id":{"Adt":11},"generics":{"regions":[],"types":[{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}],"trait_impls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}}],"span":{"data":{"file_id":7,"beg":{"line":209,"col":0},"end":{"line":215,"col":1}},"generated_from_span":null},"source_text":"impl TryFrom<&ed25519::Signature> for InternalSignature {\n type Error = SignatureError;\n\n fn try_from(sig: &ed25519::Signature) -> Result<InternalSignature, SignatureError> {\n InternalSignature::from_bytes(&sig.to_bytes())\n }\n}","attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"impl_trait":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":1398},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":2,"generics":{"regions":[{"Var":{"Free":0}}],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":1,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}}],"span":{"data":{"file_id":3,"beg":{"line":2167,"col":0},"end":{"line":2167,"col":42}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[{"HashConsedValue":[1402,{"kind":{"TraitImpl":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1400,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1399},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}}}}]},{"HashConsedValue":[1403,{"kind":{"TraitImpl":{"id":7,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1401},{"Deduplicated":1394},{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1394},"implied_trait_refs":[]},"kind":{"TraitType":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1401},"implied_trait_refs":[]},"kind":{"TraitType":[2,1]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1399},"implied_trait_refs":[]},"kind":{"TraitType":[2,2]}}],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":14,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[2,1]}}],"vtable":null},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}}],"span":{"data":{"file_id":3,"beg":{"line":2187,"col":0},"end":{"line":2188,"col":20}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1405},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"},{"index":2,"name":"F"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":3,"beg":{"line":2187,"col":20},"end":{"line":2187,"col":35}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1404},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"Deduplicated":1406}]}},"kind":{"TraitMethod":[3,0]}}],"vtable":null},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}}],"span":{"data":{"file_id":10,"beg":{"line":785,"col":0},"end":{"line":785,"col":27}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":16,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":4,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}}],"span":{"data":{"file_id":10,"beg":{"line":767,"col":0},"end":{"line":769,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"U"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":10,"beg":{"line":769,"col":7},"end":{"line":769,"col":22}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"Deduplicated":1407}]}},"kind":{"TraitMethod":[5,0]}}],"vtable":null},{"def_id":5,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}}],"span":{"data":{"file_id":13,"beg":{"line":109,"col":0},"end":{"line":119,"col":1}},"generated_from_span":null},"source_text":"impl From<InternalError> for SignatureError {\n #[cfg(not(feature = \"std\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"std\")]\n fn from(err: InternalError) -> SignatureError {\n SignatureError::from_source(err)\n }\n}","attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"impl_trait":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":17,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":6,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}}],"span":{"data":{"file_id":11,"beg":{"line":701,"col":0},"end":{"line":701,"col":25}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Opaque","lang_item":null},"impl_trait":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":772},{"Deduplicated":772}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":9,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[6,0]}}],"vtable":{"id":0,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},{"def_id":7,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":7}}],"span":{"data":{"file_id":3,"beg":{"line":2210,"col":0},"end":{"line":2210,"col":68}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1401},{"Deduplicated":1394},{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[{"HashConsedValue":[1408,{"kind":{"TraitImpl":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[null],"methods":[],"vtable":null}],"ordered_decls":[{"TraitDecl":{"NonRec":0}},{"Fun":{"NonRec":15}},{"Fun":{"NonRec":6}},{"Fun":{"NonRec":16}},{"TraitImpl":{"NonRec":3}},{"Type":{"NonRec":6}},{"Type":{"NonRec":5}},{"Type":{"NonRec":2}},{"Fun":{"NonRec":3}},{"Fun":{"NonRec":5}},{"Type":{"NonRec":7}},{"Fun":{"NonRec":4}},{"Type":{"NonRec":10}},{"Fun":{"NonRec":11}},{"Fun":{"NonRec":9}},{"Type":{"NonRec":9}},{"Fun":{"NonRec":10}},{"Fun":{"NonRec":27}},{"Fun":{"NonRec":8}},{"Type":{"NonRec":1}},{"Fun":{"NonRec":12}},{"Type":{"NonRec":3}},{"Fun":{"NonRec":25}},{"Type":{"NonRec":8}},{"Fun":{"NonRec":17}},{"TraitImpl":{"NonRec":5}},{"Type":{"NonRec":4}},{"Fun":{"NonRec":19}},{"Fun":{"NonRec":28}},{"Global":{"NonRec":1}},{"Fun":{"NonRec":20}},{"Fun":{"NonRec":13}},{"Fun":{"NonRec":2}},{"Type":{"NonRec":0}},{"Fun":{"NonRec":7}},{"Fun":{"NonRec":1}},{"Fun":{"NonRec":0}}]},"has_errors":false}