mirror of
https://github.com/saymrwulf/dalek-ed25519-verified.git
synced 2026-09-03 20:13:48 +00:00
extract.sh drops --opaque crate::edwards::decompress: step_1/step_2, sqrt_ratio_i, pow_p58, and FieldElement51::from_bytes now extract as real code (source aa0f6ab patches step_2's conditional_negate to the documented negate-then-conditional-assign - the ConditionallyNegatable blanket impl is the one thing the toolchain cannot translate). No new axioms: the slice-level ct_eq the sqrt check needs was already a real def. Full button green on the regenerated universe. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 line
No EOL
355 KiB
Rust
1 line
No EOL
355 KiB
Rust
{"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_new","crate::verifying::sha512_update","crate::verifying::sha512_finalize_bytes","crate::signature::compressed_from_bytes","curve25519_dalek","sha2","digest","ed25519","signature","subtle","zeroize"],"exclude":["hybrid_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/dalek-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::{Digest, array::typenum::U64},\n edwards::{CompressedEdwardsY, EdwardsPoint},\n montgomery::MontgomeryPoint,\n scalar::Scalar,\n};\n\nuse ed25519::signature::{MultipartVerifier, 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 curve25519_dalek::digest::Update;\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#[cfg(feature = \"hazmat\")]\nmod stream;\n#[cfg(feature = \"hazmat\")]\npub use self::stream::StreamVerifier;\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 /// Verifies the point is valid under [ZIP-215] rules. RFC 8032 / NIST point validation criteria\n /// are currently unsupported (see [dalek-cryptography/curve25519-dalek#626]).\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 ///\n /// [ZIP-215]: https://zips.z.cash/zip-0215\n /// [dalek-cryptography/curve25519-dalek#626]: https://github.com/dalek-cryptography/curve25519-dalek/issues/626\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 /// The ordinary non-batched Ed25519 verification check, rejecting non-canonical R values. (see\n /// [`Self::RCompute`]). `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 = RCompute::<CtxDigest>::compute(self, signature, None, 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\n let expected_R = RCompute::<CtxDigest>::compute(self, signature, Some(ctx), &[&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 = RCompute::<Sha512>::compute(self, signature, None, &[message]);\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Constructs stream verifier with candidate `signature`.\n ///\n /// Useful for cases where the whole message is not available all at once, allowing the\n /// internal signature state to be updated incrementally and verified at the end. In some cases,\n /// this will reduce the need for additional allocations.\n #[cfg(feature = \"hazmat\")]\n pub fn verify_stream(\n &self,\n signature: &ed25519::Signature,\n ) -> Result<StreamVerifier, SignatureError> {\n let signature = InternalSignature::try_from(signature)?;\n Ok(StreamVerifier::new(*self, signature))\n }\n\n /// Verify a `signature` on a `prehashed_message` using the Ed25519ph algorithm,\n /// using strict signature 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 = RCompute::<Sha512>::compute(self, signature, Some(ctx), &[&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\n/// Helper for verification. Computes the _expected_ R component of the signature. The\n/// caller compares this to the real R component.\n/// This 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).\n///\n/// For pre-hashed variants a `h` with the context already included can be provided.\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\npub(crate) struct RCompute<CtxDigest> {\n key: VerifyingKey,\n signature: InternalSignature,\n h: CtxDigest,\n}\n\n#[allow(non_snake_case)]\nimpl<CtxDigest> RCompute<CtxDigest>\nwhere\n CtxDigest: Digest<OutputSize = U64>,\n{\n /// If `prehash_ctx.is_some()`, this does the prehashed variant of the computation using its\n /// contents.\n pub(crate) fn compute(\n key: &VerifyingKey,\n signature: InternalSignature,\n prehash_ctx: Option<&[u8]>,\n message: &[&[u8]],\n ) -> CompressedEdwardsY {\n let mut c = Self::new(key, signature, prehash_ctx);\n message.iter().for_each(|slice| c.update(slice));\n c.finish()\n }\n\n pub(crate) fn new(\n key: &VerifyingKey,\n signature: InternalSignature,\n prehash_ctx: Option<&[u8]>,\n ) -> Self {\n let R = &signature.R;\n let A = &key.compressed;\n\n let mut h = CtxDigest::new();\n if let Some(c) = prehash_ctx {\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\n h.update(R.as_bytes());\n h.update(A.as_bytes());\n Self {\n key: *key,\n signature,\n h,\n }\n }\n\n pub(crate) fn update(&mut self, m: &[u8]) {\n self.h.update(m)\n }\n\n pub(crate) fn finish(self) -> CompressedEdwardsY {\n let k = Scalar::from_hash(self.h);\n\n let minus_A: EdwardsPoint = -self.key.point;\n // Recall the (non-batched) verification equation: -[k]A + [s]B = R\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &(minus_A), &self.signature.s)\n .compress()\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.multipart_verify(&[message], signature)\n }\n}\n\nimpl MultipartVerifier<ed25519::Signature> for VerifyingKey {\n fn multipart_verify(\n &self,\n message: &[&[u8]],\n signature: &ed25519::Signature,\n ) -> 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> + Update,\n{\n fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(\n &self,\n f: F,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n let mut digest = MsgDigest::new();\n f(&mut digest)?;\n self.verify_prehashed(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> + Update,\n{\n fn verify_digest<F: Fn(&mut MsgDigest) -> Result<(), SignatureError>>(\n &self,\n f: F,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n let mut digest = MsgDigest::new();\n f(&mut digest)?;\n self.key()\n .verify_prehashed(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\n#[cfg(feature = \"pkcs8\")]\nimpl pkcs8::spki::SignatureAlgorithmIdentifier for VerifyingKey {\n type Params = pkcs8::spki::der::AnyRef<'static>;\n\n const SIGNATURE_ALGORITHM_IDENTIFIER: pkcs8::spki::AlgorithmIdentifier<Self::Params> =\n <ed25519::Signature as pkcs8::spki::AssociatedAlgorithmIdentifier>::ALGORITHM_IDENTIFIER;\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, \"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\npub(crate) fn sha512_new() -> Sha512 {\n Digest::new()\n}\n\npub(crate) fn sha512_update(h: &mut Sha512, m: &[u8]) {\n Digest::update(h, m)\n}\n\npub(crate) fn sha512_finalize_bytes(h: Sha512) -> [u8; 64] {\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 mut h = sha512_new();\n sha512_update(&mut h, sig.R.as_bytes());\n sha512_update(&mut h, key.compressed.as_bytes());\n sha512_update(&mut h, message);\n let k = Scalar::from_bytes_mod_order_wide(&sha512_finalize_bytes(h));\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 getrandom::{SysRng, rand_core::UnwrapErr};\n//! use rand_core::TryRng;\n//! use ed25519_dalek::SigningKey;\n//! use ed25519_dalek::Signature;\n//!\n//! let mut csprng = UnwrapErr(SysRng);\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\n//! # use ed25519_dalek::SigningKey;\n//! # let mut csprng = UnwrapErr(SysRng);\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\n//! # use ed25519_dalek::{SigningKey, Signature, Signer};\n//! # let mut csprng = UnwrapErr(SysRng);\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\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 = UnwrapErr(SysRng);\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\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 = UnwrapErr(SysRng);\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\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 = UnwrapErr(SysRng);\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 [postcard](https://docs.rs/postcard):\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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! use postcard::to_allocvec;\n//! # let mut csprng = UnwrapErr(SysRng);\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> = to_allocvec(&verifying_key).unwrap();\n//! let encoded_signature: Vec<u8> = to_allocvec(&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 getrandom::{SysRng, rand_core::{TryRng, UnwrapErr}};\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! # use postcard::to_allocvec;\n//! use postcard::from_bytes;\n//!\n//! # let mut csprng = UnwrapErr(SysRng);\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> = to_allocvec(&verifying_key).unwrap();\n//! # let encoded_signature: Vec<u8> = to_allocvec(&signature).unwrap();\n//! let decoded_verifying_key: VerifyingKey = from_bytes(&encoded_verifying_key).unwrap();\n//! let decoded_signature: Signature = from_bytes(&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(any(test, feature = \"batch\")), forbid(unsafe_code))]\n#![cfg_attr(docsrs, feature(doc_cfg))]\n\n#[cfg(feature = \"batch\")]\nextern crate alloc;\n\n#[cfg(test)]\n#[macro_use]\nextern crate std;\n\n#[cfg(feature = \"rand_core\")]\npub use rand_core;\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 ::signature::{DigestSigner, DigestVerifier};\npub use ed25519::Signature;\npub use ed25519::signature::{Signer, Verifier};\n\n#[cfg(feature = \"pkcs8\")]\npub use ed25519::pkcs8;\n"},{"id":2,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ed25519-3.0.0/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-3.0.0/src/error.rs"},"crate_name":"signature","contents":null},{"id":6,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-3.0.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 // `-D ED25519_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 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 it’s 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::error::Error;\nuse core::fmt;\nuse core::fmt::Display;\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\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 = \"alloc\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"alloc\")]\n fn from(err: InternalError) -> SignatureError {\n SignatureError::from_source(err)\n }\n}\n"},{"id":14,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/digest-0.11.2/src/buffer_macros/fixed.rs"},"crate_name":"digest","contents":null},{"id":15,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/sha2-0.11.0/src/lib.rs"},"crate_name":"sha2","contents":null},{"id":16,"name":{"Local":"curve25519-dalek/src/scalar.rs"},"crate_name":"curve25519_dalek","contents":null},{"id":17,"name":{"Local":"/rustc/library/core/src/marker.rs"},"crate_name":"core","contents":null},{"id":18,"name":{"Local":"/rustc/library/core/src/ops/try_trait.rs"},"crate_name":"core","contents":null},{"id":19,"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":[593,{"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":["sha2",0]},{"Ident":["Sha512",0]}]},{"key":{"Type":10},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Ident":["Scalar",0]}]},{"key":{"Type":11},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}]},{"key":{"Fun":7},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_new",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["core",0]},{"Ident":["marker",0]},{"Ident":["Destruct",0]}]},{"key":{"TraitImpl":6},"value":[{"Ident":["sha2",0]},{"Ident":["Sha512",0]},{"Impl":{"Trait":6}}]},{"key":{"Fun":8},"value":[{"Ident":["core",0]},{"Ident":["marker",0]},{"Ident":["Destruct",0]},{"Ident":["drop_glue",0]}]},{"key":{"Fun":9},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_update",0]}]},{"key":{"Fun":10},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_finalize_bytes",0]}]},{"key":{"Fun":11},"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":[1022,{"Adt":{"id":{"Adt":10},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":7}}]},{"key":{"Fun":12},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":7}},{"Ident":["neg",0]}]},{"key":{"Fun":13},"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":[1038,{"Adt":{"id":{"Adt":11},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":14},"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":1038},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]}]},{"key":{"Fun":15},"value":[{"Ident":["ed25519",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[354,{"Adt":{"id":{"Adt":1},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}]},{"key":{"Fun":16},"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":[420,{"Adt":{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}]},{"key":{"TraitImpl":8},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":8}}]},{"key":{"Fun":17},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":18},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]},{"Ident":["from",0]}]},{"key":{"Fun":19},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]}]},{"key":{"Fun":20},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"Fun":21},"value":[{"Ident":["sha2",0]},{"Ident":["Sha512",0]},{"Impl":{"Trait":6}},{"Ident":["drop_glue",0]}]},{"key":{"TraitDecl":7},"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":7}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":22},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]},{"Ident":["try_from",0]}]},{"key":{"Fun":23},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["compressed_from_bytes",0]}]},{"key":{"Fun":24},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}]},{"key":{"Fun":25},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}]},{"key":{"Fun":26},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}]},{"key":{"Fun":27},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}]},{"key":{"Fun":28},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]},{"Ident":["into",0]}]},{"key":{"Fun":29},"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":[386,{"Adt":{"id":{"Adt":3},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["new",0]}]},{"key":{"Type":12},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["{vtable}",0]}]},{"key":{"Fun":30},"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":31},"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":1022},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}]},{"key":{"Fun":32},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}]}],"assoc_item_names":[{"types":[],"methods":["from"],"consts":[]},{"types":[],"methods":["drop_glue"],"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_Destruct_for_Sha512",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["impl_Neg_for_EdwardsPoint",0]}]},{"key":{"Fun":12},"value":[{"Impl":{"Trait":7}},{"Ident":["neg",0]}]},{"key":{"TraitImpl":8},"value":[{"Ident":["impl_Residual_for_Result_Infallible",0]}]},{"key":{"Fun":17},"value":[{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":19},"value":[{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"Fun":20},"value":[{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"Fun":21},"value":[{"Impl":{"Trait":6}},{"Ident":["drop_glue",0]}]},{"key":{"Global":0},"value":[{"Impl":{"Trait":7}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":1},"value":[{"Ident":["recompute_r_sha512",0]}]},{"key":{"Type":7},"value":[{"Ident":["CompressedEdwardsY",0]}]},{"key":{"Type":11},"value":[{"Ident":["EdwardsPoint",0]}]},{"key":{"Fun":4},"value":[{"Ident":["as_bytes",0]}]},{"key":{"Fun":0},"value":[{"Ident":["verify_sha512",0]}]},{"key":{"Type":6},"value":[{"Ident":["Infallible",0]}]},{"key":{"Type":2},"value":[{"Ident":["Result",0]}]},{"key":{"Type":5},"value":[{"Ident":["ControlFlow",0]}]},{"key":{"Fun":13},"value":[{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":16},"value":[{"Ident":["from_bytes",0]}]},{"key":{"Fun":24},"value":[{"Ident":["check_scalar",0]}]},{"key":{"Fun":29},"value":[{"Ident":["new",0]}]},{"key":{"Type":0},"value":[{"Ident":["VerifyingKey",0]}]},{"key":{"Type":3},"value":[{"Ident":["Error",0]}]},{"key":{"Fun":7},"value":[{"Ident":["sha512_new",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["TryFrom",0]}]},{"key":{"Fun":31},"value":[{"Ident":["from_bytes_mod_order",0]}]},{"key":{"Type":1},"value":[{"Ident":["Signature",0]}]},{"key":{"TraitDecl":0},"value":[{"Ident":["From",0]}]},{"key":{"Fun":23},"value":[{"Ident":["compressed_from_bytes",0]}]},{"key":{"Type":10},"value":[{"Ident":["Scalar",0]}]},{"key":{"Fun":11},"value":[{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"Fun":14},"value":[{"Ident":["compress",0]}]},{"key":{"TraitDecl":7},"value":[{"Ident":["Neg",0]}]},{"key":{"Global":1},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Fun":32},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Fun":15},"value":[{"Ident":["to_bytes",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["FromResidual",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["Residual",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["Into",0]}]},{"key":{"Type":9},"value":[{"Ident":["Sha512",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["Destruct",0]}]},{"key":{"Type":4},"value":[{"Ident":["InternalSignature",0]}]},{"key":{"Fun":9},"value":[{"Ident":["sha512_update",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["Try",0]}]},{"key":{"Type":8},"value":[{"Ident":["InternalError",0]}]},{"key":{"Fun":10},"value":[{"Ident":["sha512_finalize_bytes",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":65,"col":0},"end":{"line":71,"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":67,"col":4},"end":{"line":67,"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":593}},{"span":{"data":{"file_id":0,"beg":{"line":70,"col":4},"end":{"line":70,"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":1038}}]},"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":316,"col":0},"end":{"line":316,"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":[1688,{"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":[1689,{"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":25,"col":0},"end":{"line":25,"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 `alloc` feature is enabled, it supports an optional [`core::error::Error::source`],"},{"DocComment":" which can be used by 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":593}},{"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":1022}}]},"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":1689}}],"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":1688}}],"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 function’s 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 language’s 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":174,"col":0},"end":{"line":174,"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":23,"col":0},"end":{"line":53,"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":24,"col":4},"end":{"line":24,"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":25,"col":4},"end":{"line":25,"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":31,"col":4},"end":{"line":31,"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":32,"col":8},"end":{"line":32,"col":26}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"name","ty":{"HashConsedValue":[1691,{"Ref":["Static",{"HashConsedValue":[1690,{"Adt":{"id":{"Builtin":"Str"},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]}},{"span":{"data":{"file_id":13,"beg":{"line":33,"col":8},"end":{"line":33,"col":21}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"length","ty":{"HashConsedValue":[601,{"Literal":{"UInt":"Usize"}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","2"]}}},{"id":3,"span":{"data":{"file_id":13,"beg":{"line":36,"col":4},"end":{"line":36,"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":52,"col":4},"end":{"line":52,"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":["sha2",0]},{"Ident":["Sha512",0]}],"span":{"data":{"file_id":14,"beg":{"line":12,"col":8},"end":{"line":15,"col":9}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" SHA-512 hasher."}],"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":208,"align":16,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[128,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":["scalar",0]},{"Ident":["Scalar",0]}],"span":{"data":{"file_id":16,"beg":{"line":193,"col":0},"end":{"line":193,"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":11,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":395,"col":0},"end":{"line":395,"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":800,"col":0},"end":{"line":827,"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":[1716,{"Ref":[{"Var":{"Free":0}},{"HashConsedValue":[341,{"Adt":{"id":{"Adt":0},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]},{"HashConsedValue":[1717,{"Ref":[{"Var":{"Free":1}},{"HashConsedValue":[344,{"Slice":{"HashConsedValue":[343,{"Literal":{"UInt":"U8"}}]}}]},"Shared"]}]},{"HashConsedValue":[1718,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":354},"Shared"]}]}],"output":{"HashConsedValue":[387,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[379,{"Adt":{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}}]}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":800,"col":0},"end":{"line":827,"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":804,"col":5},"end":{"line":804,"col":31}},"generated_from_span":null},"ty":{"Deduplicated":387}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":801,"col":4},"end":{"line":801,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[390,{"Ref":[{"Body":1},{"Deduplicated":341},"Shared"]}]}},{"index":2,"name":"message","span":{"data":{"file_id":0,"beg":{"line":802,"col":4},"end":{"line":802,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[393,{"Ref":[{"Body":3},{"Deduplicated":344},"Shared"]}]}},{"index":3,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":803,"col":4},"end":{"line":803,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[396,{"Ref":[{"Body":5},{"Deduplicated":354},"Shared"]}]}},{"index":4,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":807,"col":8},"end":{"line":807,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":420}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"ty":{"HashConsedValue":[528,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[527,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[526,{"Adt":{"id":{"Adt":6},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":420}],"const_generics":[],"trait_refs":[]}}}]}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":46}},"generated_from_span":null},"ty":{"HashConsedValue":[531,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":807,"col":42},"end":{"line":807,"col":45}},"generated_from_span":null},"ty":{"HashConsedValue":[532,{"Ref":[{"Body":6},{"Deduplicated":354},"Shared"]}]}},{"index":8,"name":"residual","span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":527}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":527}},{"index":10,"name":"val","span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":420}},{"index":11,"name":"expected_R","span":{"data":{"file_id":0,"beg":{"line":808,"col":8},"end":{"line":808,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":593}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":808,"col":40},"end":{"line":808,"col":43}},"generated_from_span":null},"ty":{"HashConsedValue":[594,{"Ref":[{"Body":7},{"Deduplicated":341},"Shared"]}]}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[597,{"Ref":[{"Body":9},{"Deduplicated":420},"Shared"]}]}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[598,{"Ref":[{"Body":10},{"Deduplicated":420},"Shared"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":808,"col":51},"end":{"line":808,"col":58}},"generated_from_span":null},"ty":{"HashConsedValue":[599,{"Ref":[{"Body":11},{"Deduplicated":344},"Shared"]}]}},{"index":16,"name":"e","span":{"data":{"file_id":0,"beg":{"line":812,"col":8},"end":{"line":812,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[604,{"Ref":[{"Body":13},{"HashConsedValue":[602,{"Array":[{"Deduplicated":343},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}]}]},"Shared"]}]}},{"index":17,"name":null,"span":{"data":{"file_id":0,"beg":{"line":812,"col":12},"end":{"line":812,"col":22}},"generated_from_span":null},"ty":{"HashConsedValue":[607,{"Ref":[{"Body":15},{"Deduplicated":593},"Shared"]}]}},{"index":18,"name":"r","span":{"data":{"file_id":0,"beg":{"line":813,"col":8},"end":{"line":813,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[608,{"Ref":[{"Body":16},{"Deduplicated":602},"Shared"]}]}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":813,"col":12},"end":{"line":813,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[609,{"Ref":[{"Body":17},{"Deduplicated":593},"Shared"]}]}},{"index":20,"name":"equal","span":{"data":{"file_id":0,"beg":{"line":814,"col":8},"end":{"line":814,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[611,{"Literal":"Bool"}]}},{"index":21,"name":"i","span":{"data":{"file_id":0,"beg":{"line":815,"col":8},"end":{"line":815,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":23,"name":null,"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":817,"col":13},"end":{"line":817,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":28,"name":null,"span":{"data":{"file_id":0,"beg":{"line":817,"col":21},"end":{"line":817,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":820,"col":8},"end":{"line":820,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":822,"col":7},"end":{"line":822,"col":12}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":823,"col":11},"end":{"line":823,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":386}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[649,{"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":[1494,{"Ref":["Erased",{"Deduplicated":602},"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":[1493,{"Ref":["Erased",{"Deduplicated":343},"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":1494}},{"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":1493}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":807,"col":8},"end":{"line":827,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":807,"col":8},"end":{"line":807,"col":11}},"generated_from_span":null},"id":4,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":8},"end":{"line":807,"col":11}},"generated_from_span":null},"id":5,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":6,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":46}},"generated_from_span":null},"id":7,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":42},"end":{"line":807,"col":45}},"generated_from_span":null},"id":8,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":42},"end":{"line":807,"col":45}},"generated_from_span":null},"id":9,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":532}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":396}}},"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":807,"col":14},"end":{"line":807,"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":532}}}],"dest":{"kind":{"Local":6},"ty":{"Deduplicated":531}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":45},"end":{"line":807,"col":46}},"generated_from_span":null},"id":11,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":12,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":531}}}],"dest":{"kind":{"Local":5},"ty":{"Deduplicated":528}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":13,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":827,"col":1}},"generated_from_span":null},"id":27,"kind":{"Switch":{"Match":[{"kind":{"Local":5},"ty":{"Deduplicated":528}},[[[0],{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":827,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":16,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":17,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":527}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":528}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":527}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":18,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":19,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":527}},{"Use":[{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":527}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":20,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":386},{"Deduplicated":386}],"const_generics":[],"trait_refs":[{"HashConsedValue":[747,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":386},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":527}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":387}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":21,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":22,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":47},"end":{"line":807,"col":48}},"generated_from_span":null},"id":23,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"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":827,"col":1},"end":{"line":827,"col":1}},"generated_from_span":null},"id":25,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":28,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":29,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":420}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":528}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":420}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":14},"end":{"line":807,"col":47}},"generated_from_span":null},"id":30,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":420}},{"Use":[{"Copy":{"kind":{"Local":10},"ty":{"Deduplicated":420}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":46},"end":{"line":807,"col":47}},"generated_from_span":null},"id":31,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":807,"col":47},"end":{"line":807,"col":48}},"generated_from_span":null},"id":32,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":8},"end":{"line":808,"col":18}},"generated_from_span":null},"id":33,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":40},"end":{"line":808,"col":43}},"generated_from_span":null},"id":34,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":40},"end":{"line":808,"col":43}},"generated_from_span":null},"id":35,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":594}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":390}},"Deref"]},"ty":{"Deduplicated":341}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"id":36,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"id":37,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"id":38,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":598}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":420}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":45},"end":{"line":808,"col":49}},"generated_from_span":null},"id":39,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":597}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":598}},"Deref"]},"ty":{"Deduplicated":420}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":51},"end":{"line":808,"col":58}},"generated_from_span":null},"id":40,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":51},"end":{"line":808,"col":58}},"generated_from_span":null},"id":41,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":599}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":393}},"Deref"]},"ty":{"Deduplicated":344}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":393}},"PtrMetadata"]},"ty":{"Deduplicated":601}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":21},"end":{"line":808,"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":594}}},{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":597}}},{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":599}}}],"dest":{"kind":{"Local":11},"ty":{"Deduplicated":593}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":58},"end":{"line":808,"col":59}},"generated_from_span":null},"id":43,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":58},"end":{"line":808,"col":59}},"generated_from_span":null},"id":44,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":58},"end":{"line":808,"col":59}},"generated_from_span":null},"id":45,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":808,"col":59},"end":{"line":808,"col":60}},"generated_from_span":null},"id":46,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":812,"col":8},"end":{"line":812,"col":9}},"generated_from_span":null},"id":47,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":812,"col":12},"end":{"line":812,"col":22}},"generated_from_span":null},"id":48,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":812,"col":12},"end":{"line":812,"col":22}},"generated_from_span":null},"id":49,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":607}},{"Ref":{"place":{"kind":{"Local":11},"ty":{"Deduplicated":593}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":812,"col":12},"end":{"line":812,"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":607}}}],"dest":{"kind":{"Local":16},"ty":{"Deduplicated":604}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":812,"col":32},"end":{"line":812,"col":33}},"generated_from_span":null},"id":51,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":813,"col":8},"end":{"line":813,"col":9}},"generated_from_span":null},"id":52,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":813,"col":12},"end":{"line":813,"col":17}},"generated_from_span":null},"id":53,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":813,"col":12},"end":{"line":813,"col":17}},"generated_from_span":null},"id":54,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":609}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":4},"ty":{"Deduplicated":420}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":593}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":813,"col":12},"end":{"line":813,"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":609}}}],"dest":{"kind":{"Local":18},"ty":{"Deduplicated":608}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":813,"col":27},"end":{"line":813,"col":28}},"generated_from_span":null},"id":56,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":814,"col":8},"end":{"line":814,"col":17}},"generated_from_span":null},"id":57,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":814,"col":20},"end":{"line":814,"col":24}},"generated_from_span":null},"id":58,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":815,"col":8},"end":{"line":815,"col":13}},"generated_from_span":null},"id":59,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":815,"col":16},"end":{"line":815,"col":17}},"generated_from_span":null},"id":60,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":601}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"id":106,"kind":{"Loop":{"span":{"data":{"file_id":0,"beg":{"line":816,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":16}},"generated_from_span":null},"id":62,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":11}},"generated_from_span":null},"id":63,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":11}},"generated_from_span":null},"id":64,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":16}},"generated_from_span":null},"id":65,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":611}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"id":105,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":816,"col":15},"end":{"line":816,"col":16}},"generated_from_span":null},"id":66,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":23}},"generated_from_span":null},"id":68,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":69,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":13},"end":{"line":817,"col":14}},"generated_from_span":null},"id":70,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":13},"end":{"line":817,"col":14}},"generated_from_span":null},"id":71,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":516,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":517,"kind":{"Assign":[{"kind":{"Local":34},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":16},"ty":{"Deduplicated":604}},"Deref"]},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":518,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":519,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":34},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":26},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":35},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":15}},"generated_from_span":null},"id":74,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":35},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":75,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":21},"end":{"line":817,"col":22}},"generated_from_span":null},"id":76,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":21},"end":{"line":817,"col":22}},"generated_from_span":null},"id":77,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":520,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":521,"kind":{"Assign":[{"kind":{"Local":36},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":18},"ty":{"Deduplicated":608}},"Deref"]},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":522,"kind":{"StorageLive":37},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":523,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":36},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":28},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":37},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":19},"end":{"line":817,"col":23}},"generated_from_span":null},"id":80,"kind":{"Assign":[{"kind":{"Local":27},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":37},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":11},"end":{"line":817,"col":23}},"generated_from_span":null},"id":81,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":611}},{"BinaryOp":["Ne",{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":343}}},{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":343}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":8},"end":{"line":819,"col":9}},"generated_from_span":null},"id":95,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":8},"end":{"line":819,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":82,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":83,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":84,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":85,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":818,"col":12},"end":{"line":818,"col":25}},"generated_from_span":null},"id":86,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":8},"end":{"line":819,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":89,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":90,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":91,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":817,"col":22},"end":{"line":817,"col":23}},"generated_from_span":null},"id":92,"kind":{"StorageDead":25},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":819,"col":8},"end":{"line":819,"col":9}},"generated_from_span":null},"id":96,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":820,"col":8},"end":{"line":820,"col":14}},"generated_from_span":null},"id":98,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":601}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":820,"col":8},"end":{"line":820,"col":14}},"generated_from_span":null},"id":100,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":601}},{"Use":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":821,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"id":102,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"id":103,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":16}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":816,"col":10},"end":{"line":816,"col":16}},"generated_from_span":null},"id":104,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":816,"col":15},"end":{"line":816,"col":16}},"generated_from_span":null},"id":107,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":821,"col":4},"end":{"line":821,"col":5}},"generated_from_span":null},"id":111,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":822,"col":7},"end":{"line":822,"col":12}},"generated_from_span":null},"id":113,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":822,"col":7},"end":{"line":822,"col":12}},"generated_from_span":null},"id":114,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":611}},{"Use":[{"Copy":{"kind":{"Local":20},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":822,"col":4},"end":{"line":826,"col":5}},"generated_from_span":null},"id":128,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":0,"beg":{"line":822,"col":4},"end":{"line":826,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":823,"col":11},"end":{"line":823,"col":13}},"generated_from_span":null},"id":115,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":823,"col":11},"end":{"line":823,"col":13}},"generated_from_span":null},"id":116,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":379}},{"Aggregate":[{"Adt":[{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":823,"col":8},"end":{"line":823,"col":14}},"generated_from_span":null},"id":117,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":387}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":379}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":823,"col":13},"end":{"line":823,"col":14}},"generated_from_span":null},"id":118,"kind":{"StorageDead":31},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":822,"col":4},"end":{"line":826,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":40}},"generated_from_span":null},"id":120,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":33}},"generated_from_span":null},"id":121,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":33}},"generated_from_span":null},"id":122,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":649}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},3,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":12},"end":{"line":825,"col":40}},"generated_from_span":null},"id":123,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":649},{"Deduplicated":386}],"const_generics":[],"trait_refs":[{"HashConsedValue":[770,{"kind":{"TraitImpl":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":386},{"Deduplicated":649}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":649}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":386}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":39},"end":{"line":825,"col":40}},"generated_from_span":null},"id":124,"kind":{"StorageDead":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":8},"end":{"line":825,"col":41}},"generated_from_span":null},"id":125,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":387}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":386}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":825,"col":40},"end":{"line":825,"col":41}},"generated_from_span":null},"id":126,"kind":{"StorageDead":32},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":826,"col":4},"end":{"line":826,"col":5}},"generated_from_span":null},"id":129,"kind":{"StorageDead":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":130,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":131,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":132,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":133,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":134,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":0},"end":{"line":827,"col":1}},"generated_from_span":null},"id":135,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":827,"col":1},"end":{"line":827,"col":1}},"generated_from_span":null},"id":136,"kind":"Return","comments_before":[]}]},"comments":[[807,["(parameter named `sig`, not `signature`: the extractor's generated","code would otherwise shadow the `signature::` crate namespace)"]],[812,["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":784,"col":0},"end":{"line":797,"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 mut h = sha512_new();\n sha512_update(&mut h, sig.R.as_bytes());\n sha512_update(&mut h, key.compressed.as_bytes());\n sha512_update(&mut h, message);\n let k = Scalar::from_bytes_mod_order_wide(&sha512_finalize_bytes(h));\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":1716},{"HashConsedValue":[1719,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":420},"Shared"]}]},{"HashConsedValue":[1720,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":344},"Shared"]}]}],"output":{"Deduplicated":593}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":784,"col":0},"end":{"line":797,"col":1}},"generated_from_span":null},"bound_body_regions":67,"locals":{"arg_count":3,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":0,"beg":{"line":788,"col":5},"end":{"line":788,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":593}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":785,"col":4},"end":{"line":785,"col":7}},"generated_from_span":null},"ty":{"Deduplicated":390}},{"index":2,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":786,"col":4},"end":{"line":786,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[774,{"Ref":[{"Body":3},{"Deduplicated":420},"Shared"]}]}},{"index":3,"name":"message","span":{"data":{"file_id":0,"beg":{"line":787,"col":4},"end":{"line":787,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[776,{"Ref":[{"Body":5},{"Deduplicated":344},"Shared"]}]}},{"index":4,"name":"h","span":{"data":{"file_id":0,"beg":{"line":789,"col":8},"end":{"line":789,"col":13}},"generated_from_span":null},"ty":{"HashConsedValue":[994,{"Adt":{"id":{"Adt":9},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":4},"end":{"line":790,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[997,{"Ref":[{"Body":7},{"Deduplicated":994},"Mut"]}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[998,{"Ref":[{"Body":8},{"Deduplicated":994},"Mut"]}]}},{"index":8,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"ty":{"HashConsedValue":[999,{"Ref":[{"Body":9},{"Deduplicated":344},"Shared"]}]}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"ty":{"HashConsedValue":[1001,{"Ref":[{"Body":11},{"Deduplicated":602},"Shared"]}]}},{"index":10,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"ty":{"HashConsedValue":[603,{"Ref":[{"Body":12},{"Deduplicated":602},"Shared"]}]}},{"index":11,"name":null,"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":31}},"generated_from_span":null},"ty":{"HashConsedValue":[606,{"Ref":[{"Body":14},{"Deduplicated":593},"Shared"]}]}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":4},"end":{"line":791,"col":52}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[1003,{"Ref":[{"Body":15},{"Deduplicated":994},"Mut"]}]}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[1004,{"Ref":[{"Body":16},{"Deduplicated":994},"Mut"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"ty":{"HashConsedValue":[1005,{"Ref":[{"Body":17},{"Deduplicated":344},"Shared"]}]}},{"index":16,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"ty":{"HashConsedValue":[1006,{"Ref":[{"Body":18},{"Deduplicated":602},"Shared"]}]}},{"index":17,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"ty":{"HashConsedValue":[1007,{"Ref":[{"Body":19},{"Deduplicated":602},"Shared"]}]}},{"index":18,"name":null,"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":40}},"generated_from_span":null},"ty":{"HashConsedValue":[1008,{"Ref":[{"Body":20},{"Deduplicated":593},"Shared"]}]}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":792,"col":4},"end":{"line":792,"col":34}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":20,"name":null,"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[1009,{"Ref":[{"Body":21},{"Deduplicated":994},"Mut"]}]}},{"index":21,"name":null,"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[1010,{"Ref":[{"Body":22},{"Deduplicated":994},"Mut"]}]}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":792,"col":26},"end":{"line":792,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[1011,{"Ref":[{"Body":23},{"Deduplicated":344},"Shared"]}]}},{"index":23,"name":"k","span":{"data":{"file_id":0,"beg":{"line":793,"col":8},"end":{"line":793,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":1022}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"ty":{"HashConsedValue":[1028,{"Ref":[{"Body":25},{"HashConsedValue":[1026,{"Array":[{"Deduplicated":343},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":601}}]}]},"Shared"]}]}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"ty":{"HashConsedValue":[1029,{"Ref":[{"Body":26},{"Deduplicated":1026},"Shared"]}]}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":793,"col":47},"end":{"line":793,"col":71}},"generated_from_span":null},"ty":{"Deduplicated":1026}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":793,"col":69},"end":{"line":793,"col":70}},"generated_from_span":null},"ty":{"Deduplicated":994}},{"index":28,"name":"minus_A","span":{"data":{"file_id":0,"beg":{"line":795,"col":8},"end":{"line":795,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":1038}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":795,"col":33},"end":{"line":795,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":1038}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"ty":{"HashConsedValue":[1041,{"Ref":[{"Body":28},{"Deduplicated":1038},"Shared"]}]}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"ty":{"Deduplicated":1038}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[1044,{"Ref":[{"Body":30},{"Deduplicated":1022},"Shared"]}]}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[1045,{"Ref":[{"Body":31},{"Deduplicated":1022},"Shared"]}]}},{"index":34,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[1046,{"Ref":[{"Body":32},{"Deduplicated":1038},"Shared"]}]}},{"index":35,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[1047,{"Ref":[{"Body":33},{"Deduplicated":1038},"Shared"]}]}},{"index":36,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[1048,{"Ref":[{"Body":34},{"Deduplicated":1022},"Shared"]}]}},{"index":37,"name":null,"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[1049,{"Ref":[{"Body":35},{"Deduplicated":1022},"Shared"]}]}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":789,"col":8},"end":{"line":797,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":789,"col":8},"end":{"line":789,"col":13}},"generated_from_span":null},"id":137,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":789,"col":16},"end":{"line":789,"col":28}},"generated_from_span":null},"id":138,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":7}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":994}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":4},"end":{"line":790,"col":43}},"generated_from_span":null},"id":139,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"id":140,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"id":141,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"id":142,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":998}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":994}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":18},"end":{"line":790,"col":24}},"generated_from_span":null},"id":143,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":997}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":7},"ty":{"Deduplicated":998}},"Deref"]},"ty":{"Deduplicated":994}},"kind":"TwoPhaseMut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":144,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":145,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":146,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":31}},"generated_from_span":null},"id":147,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":31}},"generated_from_span":null},"id":148,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":606}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":774}},"Deref"]},"ty":{"Deduplicated":420}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":593}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":149,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":37}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":606}}}],"dest":{"kind":{"Local":10},"ty":{"Deduplicated":603}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":150,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":1001}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":10},"ty":{"Deduplicated":603}},"Deref"]},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":26},"end":{"line":790,"col":42}},"generated_from_span":null},"id":151,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":1001}}}],"dest":{"kind":{"Local":8},"ty":{"Deduplicated":999}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":41},"end":{"line":790,"col":42}},"generated_from_span":null},"id":152,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":41},"end":{"line":790,"col":42}},"generated_from_span":null},"id":153,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":4},"end":{"line":790,"col":43}},"generated_from_span":null},"id":154,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":9}},"generics":{"regions":[{"Body":42},{"Body":43}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":997}}},{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":999}}}],"dest":{"kind":{"Local":5},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":42},"end":{"line":790,"col":43}},"generated_from_span":null},"id":155,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":42},"end":{"line":790,"col":43}},"generated_from_span":null},"id":156,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":43},"end":{"line":790,"col":44}},"generated_from_span":null},"id":157,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":43},"end":{"line":790,"col":44}},"generated_from_span":null},"id":158,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":790,"col":43},"end":{"line":790,"col":44}},"generated_from_span":null},"id":159,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":4},"end":{"line":791,"col":52}},"generated_from_span":null},"id":160,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"id":161,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"id":162,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"id":163,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":1004}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":994}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":18},"end":{"line":791,"col":24}},"generated_from_span":null},"id":164,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":1003}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":1004}},"Deref"]},"ty":{"Deduplicated":994}},"kind":"TwoPhaseMut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":165,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":166,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":167,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":40}},"generated_from_span":null},"id":168,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":40}},"generated_from_span":null},"id":169,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":1008}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":390}},"Deref"]},"ty":{"Deduplicated":341}},{"Field":[{"Adt":[0,null]},0]}]},"ty":{"Deduplicated":593}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":170,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":45}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":1008}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":1007}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":171,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":1006}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":17},"ty":{"Deduplicated":1007}},"Deref"]},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":26},"end":{"line":791,"col":51}},"generated_from_span":null},"id":172,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":1006}}}],"dest":{"kind":{"Local":15},"ty":{"Deduplicated":1005}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":50},"end":{"line":791,"col":51}},"generated_from_span":null},"id":173,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":50},"end":{"line":791,"col":51}},"generated_from_span":null},"id":174,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":4},"end":{"line":791,"col":52}},"generated_from_span":null},"id":175,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":9}},"generics":{"regions":[{"Body":49},{"Body":50}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":1003}}},{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":1005}}}],"dest":{"kind":{"Local":12},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":51},"end":{"line":791,"col":52}},"generated_from_span":null},"id":176,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":51},"end":{"line":791,"col":52}},"generated_from_span":null},"id":177,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":52},"end":{"line":791,"col":53}},"generated_from_span":null},"id":178,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":52},"end":{"line":791,"col":53}},"generated_from_span":null},"id":179,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":791,"col":52},"end":{"line":791,"col":53}},"generated_from_span":null},"id":180,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":4},"end":{"line":792,"col":34}},"generated_from_span":null},"id":181,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"id":182,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"id":183,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"id":184,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":1010}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":994}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":18},"end":{"line":792,"col":24}},"generated_from_span":null},"id":185,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":1009}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":21},"ty":{"Deduplicated":1010}},"Deref"]},"ty":{"Deduplicated":994}},"kind":"TwoPhaseMut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":26},"end":{"line":792,"col":33}},"generated_from_span":null},"id":186,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":26},"end":{"line":792,"col":33}},"generated_from_span":null},"id":187,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":1011}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":776}},"Deref"]},"ty":{"Deduplicated":344}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":776}},"PtrMetadata"]},"ty":{"Deduplicated":601}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":4},"end":{"line":792,"col":34}},"generated_from_span":null},"id":188,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":9}},"generics":{"regions":[{"Body":53},{"Body":54}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":20},"ty":{"Deduplicated":1009}}},{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":1011}}}],"dest":{"kind":{"Local":19},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":33},"end":{"line":792,"col":34}},"generated_from_span":null},"id":189,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":33},"end":{"line":792,"col":34}},"generated_from_span":null},"id":190,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":34},"end":{"line":792,"col":35}},"generated_from_span":null},"id":191,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":792,"col":34},"end":{"line":792,"col":35}},"generated_from_span":null},"id":192,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":8},"end":{"line":793,"col":9}},"generated_from_span":null},"id":193,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"id":194,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"id":195,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":47},"end":{"line":793,"col":71}},"generated_from_span":null},"id":196,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":69},"end":{"line":793,"col":70}},"generated_from_span":null},"id":197,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":69},"end":{"line":793,"col":70}},"generated_from_span":null},"id":198,"kind":{"Assign":[{"kind":{"Local":27},"ty":{"Deduplicated":994}},{"Use":[{"Move":{"kind":{"Local":4},"ty":{"Deduplicated":994}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":47},"end":{"line":793,"col":71}},"generated_from_span":null},"id":199,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":10}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":994}}}],"dest":{"kind":{"Local":26},"ty":{"Deduplicated":1026}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":70},"end":{"line":793,"col":71}},"generated_from_span":null},"id":200,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"id":201,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":1029}},{"Ref":{"place":{"kind":{"Local":26},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":46},"end":{"line":793,"col":71}},"generated_from_span":null},"id":202,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":1028}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":25},"ty":{"Deduplicated":1029}},"Deref"]},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":12},"end":{"line":793,"col":72}},"generated_from_span":null},"id":203,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":11}},"generics":{"regions":[{"Body":57}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":1028}}}],"dest":{"kind":{"Local":23},"ty":{"Deduplicated":1022}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":71},"end":{"line":793,"col":72}},"generated_from_span":null},"id":204,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":72},"end":{"line":793,"col":73}},"generated_from_span":null},"id":205,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":793,"col":72},"end":{"line":793,"col":73}},"generated_from_span":null},"id":206,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":795,"col":8},"end":{"line":795,"col":15}},"generated_from_span":null},"id":207,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":795,"col":33},"end":{"line":795,"col":42}},"generated_from_span":null},"id":208,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":795,"col":33},"end":{"line":795,"col":42}},"generated_from_span":null},"id":209,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":1038}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":390}},"Deref"]},"ty":{"Deduplicated":341}},{"Field":[{"Adt":[0,null]},1]}]},"ty":{"Deduplicated":1038}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":795,"col":32},"end":{"line":795,"col":42}},"generated_from_span":null},"id":210,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":12}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":1038}}}],"dest":{"kind":{"Local":28},"ty":{"Deduplicated":1038}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":795,"col":41},"end":{"line":795,"col":42}},"generated_from_span":null},"id":211,"kind":{"StorageDead":29},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"id":212,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"id":213,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"id":214,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"id":215,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"id":216,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":1045}},{"Ref":{"place":{"kind":{"Local":23},"ty":{"Deduplicated":1022}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":54},"end":{"line":796,"col":56}},"generated_from_span":null},"id":217,"kind":{"Assign":[{"kind":{"Local":32},"ty":{"Deduplicated":1044}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":33},"ty":{"Deduplicated":1045}},"Deref"]},"ty":{"Deduplicated":1022}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"id":218,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"id":219,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"id":220,"kind":{"Assign":[{"kind":{"Local":35},"ty":{"Deduplicated":1047}},{"Ref":{"place":{"kind":{"Local":28},"ty":{"Deduplicated":1038}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":58},"end":{"line":796,"col":66}},"generated_from_span":null},"id":221,"kind":{"Assign":[{"kind":{"Local":34},"ty":{"Deduplicated":1046}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":35},"ty":{"Deduplicated":1047}},"Deref"]},"ty":{"Deduplicated":1038}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"id":222,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"id":223,"kind":{"StorageLive":37},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"id":224,"kind":{"Assign":[{"kind":{"Local":37},"ty":{"Deduplicated":1049}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":774}},"Deref"]},"ty":{"Deduplicated":420}},{"Field":[{"Adt":[4,null]},1]}]},"ty":{"Deduplicated":1022}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":68},"end":{"line":796,"col":74}},"generated_from_span":null},"id":225,"kind":{"Assign":[{"kind":{"Local":36},"ty":{"Deduplicated":1048}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":37},"ty":{"Deduplicated":1049}},"Deref"]},"ty":{"Deduplicated":1022}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"id":226,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":13}},"generics":{"regions":[{"Body":61},{"Body":62},{"Body":63}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":1044}}},{"Move":{"kind":{"Local":34},"ty":{"Deduplicated":1046}}},{"Move":{"kind":{"Local":36},"ty":{"Deduplicated":1048}}}],"dest":{"kind":{"Local":31},"ty":{"Deduplicated":1038}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":75}},"generated_from_span":null},"id":227,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":1041}},{"Ref":{"place":{"kind":{"Local":31},"ty":{"Deduplicated":1038}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":74},"end":{"line":796,"col":75}},"generated_from_span":null},"id":228,"kind":{"StorageDead":36},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":74},"end":{"line":796,"col":75}},"generated_from_span":null},"id":229,"kind":{"StorageDead":34},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":74},"end":{"line":796,"col":75}},"generated_from_span":null},"id":230,"kind":{"StorageDead":32},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":4},"end":{"line":796,"col":86}},"generated_from_span":null},"id":231,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":14}},"generics":{"regions":[{"Body":65}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":1041}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":593}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":85},"end":{"line":796,"col":86}},"generated_from_span":null},"id":232,"kind":{"StorageDead":37},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":85},"end":{"line":796,"col":86}},"generated_from_span":null},"id":233,"kind":{"StorageDead":35},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":85},"end":{"line":796,"col":86}},"generated_from_span":null},"id":234,"kind":{"StorageDead":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":85},"end":{"line":796,"col":86}},"generated_from_span":null},"id":235,"kind":{"StorageDead":31},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":796,"col":85},"end":{"line":796,"col":86}},"generated_from_span":null},"id":236,"kind":{"StorageDead":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":797,"col":0},"end":{"line":797,"col":1}},"generated_from_span":null},"id":237,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":797,"col":0},"end":{"line":797,"col":1}},"generated_from_span":null},"id":238,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":797,"col":0},"end":{"line":797,"col":1}},"generated_from_span":null},"id":239,"kind":{"Drop":[{"kind":{"Local":4},"ty":{"Deduplicated":994}},{"kind":{"Fun":{"Regular":21}},"generics":{"regions":[{"Body":66}],"types":[],"const_generics":[],"trait_refs":[]}},"Conditional"]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":797,"col":0},"end":{"line":797,"col":1}},"generated_from_span":null},"id":240,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":797,"col":1},"end":{"line":797,"col":1}},"generated_from_span":null},"id":241,"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":210,"col":4},"end":{"line":212,"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":[1692,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":354},"Shared"]}]}],"output":{"Deduplicated":531}},"src":{"TraitImpl":{"impl_ref":{"id":0,"generics":{"regions":[{"Var":{"Free":0}}],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":1692},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":210,"col":4},"end":{"line":212,"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":210,"col":45},"end":{"line":210,"col":86}},"generated_from_span":null},"ty":{"Deduplicated":531}},{"index":1,"name":"sig","span":{"data":{"file_id":7,"beg":{"line":210,"col":16},"end":{"line":210,"col":19}},"generated_from_span":null},"ty":{"HashConsedValue":[1146,{"Ref":[{"Body":1},{"Deduplicated":354},"Shared"]}]}},{"index":2,"name":null,"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[1148,{"Ref":[{"Body":3},{"Deduplicated":1026},"Shared"]}]}},{"index":3,"name":null,"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[1149,{"Ref":[{"Body":4},{"Deduplicated":1026},"Shared"]}]}},{"index":4,"name":null,"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":53}},"generated_from_span":null},"ty":{"Deduplicated":1026}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":396}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":212,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"id":242,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"id":243,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":53}},"generated_from_span":null},"id":244,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":42}},"generated_from_span":null},"id":245,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":42}},"generated_from_span":null},"id":246,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":396}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":1146}},"Deref"]},"ty":{"Deduplicated":354}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":39},"end":{"line":211,"col":53}},"generated_from_span":null},"id":247,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":15}},"generics":{"regions":[{"Body":7}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":396}}}],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":1026}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":52},"end":{"line":211,"col":53}},"generated_from_span":null},"id":248,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"id":249,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":1149}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":38},"end":{"line":211,"col":53}},"generated_from_span":null},"id":250,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":1148}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":1149}},"Deref"]},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":8},"end":{"line":211,"col":54}},"generated_from_span":null},"id":251,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":16}},"generics":{"regions":[{"Body":9}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":2},"ty":{"Deduplicated":1148}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":531}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":53},"end":{"line":211,"col":54}},"generated_from_span":null},"id":252,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":53},"end":{"line":211,"col":54}},"generated_from_span":null},"id":253,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":211,"col":53},"end":{"line":211,"col":54}},"generated_from_span":null},"id":254,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":212,"col":5},"end":{"line":212,"col":5}},"generated_from_span":null},"id":255,"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":[1693,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}]}],"output":{"HashConsedValue":[1721,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1695,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":526},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1693}],"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":593},"kind":"InherentImplBlock"}}},{"Ident":["as_bytes",0]}],"span":{"data":{"file_id":11,"beg":{"line":197,"col":4},"end":{"line":197,"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":[1722,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":593},"Shared"]}]}],"output":{"HashConsedValue":[1723,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":602},"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":[1698,{"TypeVar":{"Free":2}}]},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1695}],"output":{"HashConsedValue":[1699,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1700,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1698},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1699},{"Deduplicated":1695}],"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]<T> 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":1689},{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1688}],"output":{"Deduplicated":1689}},"src":{"TraitImpl":{"impl_ref":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1701,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1689},{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"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_new",0]}],"span":{"data":{"file_id":0,"beg":{"line":771,"col":0},"end":{"line":773,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn sha512_new() -> Sha512 {\n Digest::new()\n}","attr_info":{"attributes":[],"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":[],"output":{"Deduplicated":994}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":8,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["marker",0]},{"Ident":["Destruct",0]},{"Ident":["drop_glue",0]}],"span":{"data":{"file_id":17,"beg":{"line":1062,"col":0},"end":{"line":1062,"col":38}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":true,"abi":"Rust","inputs":[{"HashConsedValue":[1724,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":1688},"Mut"]}]}],"output":{"Deduplicated":379}},"src":{"TraitDecl":{"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":9,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_update",0]}],"span":{"data":{"file_id":0,"beg":{"line":775,"col":0},"end":{"line":777,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn sha512_update(h: &mut Sha512, m: &[u8]) {\n Digest::update(h, m)\n}","attr_info":{"attributes":[],"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"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1725,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":994},"Mut"]}]},{"Deduplicated":1717}],"output":{"Deduplicated":379}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":10,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_finalize_bytes",0]}],"span":{"data":{"file_id":0,"beg":{"line":779,"col":0},"end":{"line":781,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn sha512_finalize_bytes(h: Sha512) -> [u8; 64] {\n Digest::finalize(h).into()\n}","attr_info":{"attributes":[],"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":994}],"output":{"Deduplicated":1026}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":11,"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":1022},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}],"span":{"data":{"file_id":16,"beg":{"line":248,"col":4},"end":{"line":248,"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":[1726,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":1026},"Shared"]}]}],"output":{"Deduplicated":1022}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":12,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":7}},{"Ident":["neg",0]}],"span":{"data":{"file_id":11,"beg":{"line":874,"col":4},"end":{"line":874,"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":1038}],"output":{"Deduplicated":1038}},"src":{"TraitImpl":{"impl_ref":{"id":7,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":7,"generics":{"regions":[],"types":[{"Deduplicated":1038},{"Deduplicated":1038}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":13,"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":1038},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":1085,"col":4},"end":{"line":1089,"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":[1727,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":1022},"Shared"]}]},{"HashConsedValue":[1728,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":1038},"Shared"]}]},{"HashConsedValue":[1729,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":1022},"Shared"]}]}],"output":{"Deduplicated":1038}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":14,"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":1038},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}],"span":{"data":{"file_id":11,"beg":{"line":620,"col":4},"end":{"line":620,"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":[1730,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":1038},"Shared"]}]}],"output":{"Deduplicated":593}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":15,"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":354},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}],"span":{"data":{"file_id":2,"beg":{"line":368,"col":4},"end":{"line":368,"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":1692}],"output":{"Deduplicated":1026}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":16,"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":420},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}],"span":{"data":{"file_id":7,"beg":{"line":186,"col":4},"end":{"line":204,"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 it’s 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":1726}],"output":{"Deduplicated":531}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":186,"col":4},"end":{"line":204,"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":186,"col":57},"end":{"line":186,"col":98}},"generated_from_span":null},"ty":{"Deduplicated":531}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":186,"col":22},"end":{"line":186,"col":27}},"generated_from_span":null},"ty":{"HashConsedValue":[1274,{"Ref":[{"Body":1},{"Deduplicated":1026},"Shared"]}]}},{"index":2,"name":"R_bytes","span":{"data":{"file_id":7,"beg":{"line":191,"col":12},"end":{"line":191,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":3,"name":"s_bytes","span":{"data":{"file_id":7,"beg":{"line":192,"col":12},"end":{"line":192,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":20}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":7,"name":null,"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":195,"col":31},"end":{"line":195,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":195,"col":20},"end":{"line":195,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":20},"end":{"line":196,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":200,"col":11},"end":{"line":203,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":420}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":201,"col":15},"end":{"line":201,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":593}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":201,"col":37},"end":{"line":201,"col":44}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":1022}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"ty":{"HashConsedValue":[1277,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":527},{"Deduplicated":1022}],"const_generics":[],"trait_refs":[]}}}]}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":36}},"generated_from_span":null},"ty":{"HashConsedValue":[1280,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1022},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}}]}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":28},"end":{"line":202,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":23,"name":"residual","span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":527}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":527}},{"index":25,"name":"val","span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":1022}},{"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":[1495,{"Ref":["Erased",{"Deduplicated":1026},"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":1493}},{"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":[1497,{"Ref":["Erased",{"Deduplicated":602},"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":[1496,{"Ref":["Erased",{"Deduplicated":343},"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":1495}},{"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":1493}},{"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":1497}},{"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":1496}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":191,"col":12},"end":{"line":204,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":191,"col":12},"end":{"line":191,"col":23}},"generated_from_span":null},"id":259,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":191,"col":12},"end":{"line":191,"col":23}},"generated_from_span":null},"id":262,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":191,"col":12},"end":{"line":191,"col":23}},"generated_from_span":null},"id":264,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":191,"col":36},"end":{"line":191,"col":45}},"generated_from_span":null},"id":265,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}}],"dest":{"kind":{"Local":2},"ty":{"Deduplicated":602}}}},"comments_before":["TODO: Use bytes.split_array_ref once it’s 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":192,"col":12},"end":{"line":192,"col":23}},"generated_from_span":null},"id":266,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":192,"col":36},"end":{"line":192,"col":45}},"generated_from_span":null},"id":267,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}}],"dest":{"kind":{"Local":3},"ty":{"Deduplicated":602}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":17}},"generated_from_span":null},"id":268,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":20},"end":{"line":193,"col":21}},"generated_from_span":null},"id":269,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":601}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"id":317,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":194,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":20}},"generated_from_span":null},"id":271,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":15}},"generated_from_span":null},"id":272,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":15}},"generated_from_span":null},"id":273,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":20}},"generated_from_span":null},"id":274,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":611}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"id":316,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":194,"col":19},"end":{"line":194,"col":20}},"generated_from_span":null},"id":275,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":276,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":31},"end":{"line":195,"col":32}},"generated_from_span":null},"id":277,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":31},"end":{"line":195,"col":32}},"generated_from_span":null},"id":278,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":524,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":525,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":1495}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":1274}},"Deref"]},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":526,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":527,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":1495}}},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":25},"end":{"line":195,"col":33}},"generated_from_span":null},"id":281,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":27},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":20},"end":{"line":195,"col":21}},"generated_from_span":null},"id":282,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":20},"end":{"line":195,"col":21}},"generated_from_span":null},"id":283,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":33}},"generated_from_span":null},"id":528,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":33}},"generated_from_span":null},"id":529,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":1497}},{"Ref":{"place":{"kind":{"Local":2},"ty":{"Deduplicated":602}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":33}},"generated_from_span":null},"id":530,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":33}},"generated_from_span":null},"id":531,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":1497}}},{"Copy":{"kind":{"Local":9},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":29},"ty":{"Deduplicated":1496}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":33}},"generated_from_span":null},"id":286,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":29},"ty":{"Deduplicated":1496}},"Deref"]},"ty":{"Deduplicated":343}},{"Use":[{"Move":{"kind":{"Local":7},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":32},"end":{"line":195,"col":33}},"generated_from_span":null},"id":287,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":33},"end":{"line":195,"col":34}},"generated_from_span":null},"id":288,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":33},"end":{"line":195,"col":34}},"generated_from_span":null},"id":289,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":290,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":37}},"generated_from_span":null},"id":291,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":32}},"generated_from_span":null},"id":292,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":32}},"generated_from_span":null},"id":293,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":37}},"generated_from_span":null},"id":294,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":601}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":12},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":31},"end":{"line":196,"col":37}},"generated_from_span":null},"id":296,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":601}},{"Use":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":36},"end":{"line":196,"col":37}},"generated_from_span":null},"id":297,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":532,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":533,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":1495}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":1274}},"Deref"]},"ty":{"Deduplicated":1026}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":534,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":535,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":1495}}},{"Copy":{"kind":{"Local":11},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":31},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":25},"end":{"line":196,"col":38}},"generated_from_span":null},"id":300,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":31},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":20},"end":{"line":196,"col":21}},"generated_from_span":null},"id":301,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":20},"end":{"line":196,"col":21}},"generated_from_span":null},"id":302,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":12},"end":{"line":196,"col":38}},"generated_from_span":null},"id":536,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":12},"end":{"line":196,"col":38}},"generated_from_span":null},"id":537,"kind":{"Assign":[{"kind":{"Local":32},"ty":{"Deduplicated":1497}},{"Ref":{"place":{"kind":{"Local":3},"ty":{"Deduplicated":602}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":12},"end":{"line":196,"col":38}},"generated_from_span":null},"id":538,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":12},"end":{"line":196,"col":38}},"generated_from_span":null},"id":539,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":1497}}},{"Copy":{"kind":{"Local":14},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":33},"ty":{"Deduplicated":1496}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":12},"end":{"line":196,"col":38}},"generated_from_span":null},"id":305,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":33},"ty":{"Deduplicated":1496}},"Deref"]},"ty":{"Deduplicated":343}},{"Use":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":37},"end":{"line":196,"col":38}},"generated_from_span":null},"id":306,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":38},"end":{"line":196,"col":39}},"generated_from_span":null},"id":307,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":38},"end":{"line":196,"col":39}},"generated_from_span":null},"id":308,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":18}},"generated_from_span":null},"id":309,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":601}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":18}},"generated_from_span":null},"id":311,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":601}},{"Use":[{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"id":313,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"id":314,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":20}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":194,"col":14},"end":{"line":194,"col":20}},"generated_from_span":null},"id":315,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":19},"end":{"line":194,"col":20}},"generated_from_span":null},"id":318,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":8},"end":{"line":198,"col":9}},"generated_from_span":null},"id":322,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":11},"end":{"line":203,"col":9}},"generated_from_span":null},"id":324,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":201,"col":15},"end":{"line":201,"col":45}},"generated_from_span":null},"id":325,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":201,"col":37},"end":{"line":201,"col":44}},"generated_from_span":null},"id":326,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":201,"col":37},"end":{"line":201,"col":44}},"generated_from_span":null},"id":327,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":602}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":602}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":201,"col":15},"end":{"line":201,"col":45}},"generated_from_span":null},"id":328,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":23}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":602}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":593}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":201,"col":44},"end":{"line":201,"col":45}},"generated_from_span":null},"id":329,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":330,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":331,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":36}},"generated_from_span":null},"id":332,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":28},"end":{"line":202,"col":35}},"generated_from_span":null},"id":333,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":28},"end":{"line":202,"col":35}},"generated_from_span":null},"id":334,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":602}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":602}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":36}},"generated_from_span":null},"id":335,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":24}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":602}}}],"dest":{"kind":{"Local":21},"ty":{"Deduplicated":1280}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":35},"end":{"line":202,"col":36}},"generated_from_span":null},"id":336,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":337,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":1022},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":21},"ty":{"Deduplicated":1280}}}],"dest":{"kind":{"Local":20},"ty":{"Deduplicated":1277}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":338,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":204,"col":5}},"generated_from_span":null},"id":357,"kind":{"Switch":{"Match":[{"kind":{"Local":20},"ty":{"Deduplicated":1277}},[[[0],{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":204,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":341,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":342,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":527}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1277}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":527}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":343,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":344,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":527}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":527}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":345,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":386},{"Deduplicated":386}],"const_generics":[],"trait_refs":[{"Deduplicated":747}]}}},"args":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":527}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":531}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":346,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":347,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":8},"end":{"line":203,"col":9}},"generated_from_span":null},"id":348,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":8},"end":{"line":203,"col":9}},"generated_from_span":null},"id":349,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":9},"end":{"line":203,"col":10}},"generated_from_span":null},"id":350,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":9},"end":{"line":203,"col":10}},"generated_from_span":null},"id":351,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":352,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":353,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":354,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":5},"end":{"line":204,"col":5}},"generated_from_span":null},"id":355,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":358,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":359,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":1022}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1277}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":1022}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":15},"end":{"line":202,"col":37}},"generated_from_span":null},"id":360,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":1022}},{"Use":[{"Copy":{"kind":{"Local":25},"ty":{"Deduplicated":1022}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":36},"end":{"line":202,"col":37}},"generated_from_span":null},"id":361,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":11},"end":{"line":203,"col":9}},"generated_from_span":null},"id":362,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":420}},{"Aggregate":[{"Adt":[{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":593}}},{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":1022}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":8},"end":{"line":203,"col":9}},"generated_from_span":null},"id":363,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":8},"end":{"line":203,"col":9}},"generated_from_span":null},"id":364,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":8},"end":{"line":203,"col":10}},"generated_from_span":null},"id":365,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":531}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":420}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":9},"end":{"line":203,"col":10}},"generated_from_span":null},"id":366,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":9},"end":{"line":203,"col":10}},"generated_from_span":null},"id":367,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":368,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":369,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":4},"end":{"line":204,"col":5}},"generated_from_span":null},"id":370,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":5},"end":{"line":204,"col":5}},"generated_from_span":null},"id":371,"kind":"Return","comments_before":[]}]},"comments":[[191,["TODO: Use bytes.split_array_ref once it’s 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":17,"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":1688}],"output":{"Deduplicated":1693}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1693}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":18,"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":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1689}],"output":{"Deduplicated":1688}},"src":{"TraitDecl":{"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":19,"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":1688}],"output":{"Deduplicated":1688}},"src":{"TraitImpl":{"impl_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":20,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}],"span":{"data":{"file_id":13,"beg":{"line":108,"col":4},"end":{"line":110,"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":649}],"output":{"Deduplicated":386}},"src":{"TraitImpl":{"impl_ref":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":386},{"Deduplicated":649}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":13,"beg":{"line":108,"col":4},"end":{"line":110,"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":108,"col":36},"end":{"line":108,"col":50}},"generated_from_span":null},"ty":{"Deduplicated":386}},{"index":1,"name":"_err","span":{"data":{"file_id":13,"beg":{"line":108,"col":12},"end":{"line":108,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":649}}]},"body":{"span":{"data":{"file_id":13,"beg":{"line":110,"col":5},"end":{"line":110,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":13,"beg":{"line":109,"col":8},"end":{"line":109,"col":29}},"generated_from_span":null},"id":372,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":29}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":386}}}},"comments_before":[]},{"span":{"data":{"file_id":13,"beg":{"line":110,"col":5},"end":{"line":110,"col":5}},"generated_from_span":null},"id":373,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":21,"item_meta":{"name":[{"Ident":["sha2",0]},{"Ident":["Sha512",0]},{"Impl":{"Trait":6}},{"Ident":["drop_glue",0]}],"span":{"data":{"file_id":14,"beg":{"line":12,"col":8},"end":{"line":15,"col":9}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"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":true,"abi":"Rust","inputs":[{"Deduplicated":1725}],"output":{"Deduplicated":379}},"src":{"TraitImpl":{"impl_ref":{"id":6,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":994}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":22,"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":2,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1689}],"output":{"Deduplicated":1699}},"src":{"TraitDecl":{"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":23,"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":602}],"output":{"Deduplicated":593}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":24,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}],"span":{"data":{"file_id":7,"beg":{"line":104,"col":0},"end":{"line":131,"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":602}],"output":{"Deduplicated":1280}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":104,"col":0},"end":{"line":131,"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":104,"col":36},"end":{"line":104,"col":66}},"generated_from_span":null},"ty":{"Deduplicated":1280}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":104,"col":16},"end":{"line":104,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":2,"name":"lt","span":{"data":{"file_id":7,"beg":{"line":111,"col":8},"end":{"line":111,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":3,"name":"decided","span":{"data":{"file_id":7,"beg":{"line":112,"col":8},"end":{"line":112,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":7,"name":"j","span":{"data":{"file_id":7,"beg":{"line":115,"col":12},"end":{"line":115,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":116,"col":12},"end":{"line":116,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":21},"end":{"line":117,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":34},"end":{"line":117,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":28},"end":{"line":120,"col":29}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":343}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":120,"col":41},"end":{"line":120,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":23,"name":null,"span":{"data":{"file_id":7,"beg":{"line":124,"col":8},"end":{"line":124,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":601}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":126,"col":7},"end":{"line":126,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":25,"name":null,"span":{"data":{"file_id":7,"beg":{"line":127,"col":11},"end":{"line":127,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":1022}},{"index":26,"name":null,"span":{"data":{"file_id":7,"beg":{"line":127,"col":40},"end":{"line":127,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":602}},{"index":27,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":386}},{"index":28,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":39}},"generated_from_span":null},"ty":{"Deduplicated":649}},{"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":1494}},{"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":1493}},{"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":1494}},{"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":1493}},{"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":1494}},{"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":1493}},{"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":1494}},{"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":1493}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":111,"col":8},"end":{"line":131,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":111,"col":8},"end":{"line":111,"col":14}},"generated_from_span":null},"id":375,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":111,"col":8},"end":{"line":111,"col":14}},"generated_from_span":null},"id":380,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":111,"col":8},"end":{"line":111,"col":14}},"generated_from_span":null},"id":381,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":111,"col":17},"end":{"line":111,"col":22}},"generated_from_span":null},"id":382,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":611}}},"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":112,"col":8},"end":{"line":112,"col":19}},"generated_from_span":null},"id":383,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":112,"col":22},"end":{"line":112,"col":27}},"generated_from_span":null},"id":384,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":13}},"generated_from_span":null},"id":385,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":16},"end":{"line":113,"col":18}},"generated_from_span":null},"id":386,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":601}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":483,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":114,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":15}},"generated_from_span":null},"id":388,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":11}},"generated_from_span":null},"id":389,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":11}},"generated_from_span":null},"id":390,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":15}},"generated_from_span":null},"id":391,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":611}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":482,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":114,"col":14},"end":{"line":114,"col":15}},"generated_from_span":null},"id":392,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":12},"end":{"line":115,"col":13}},"generated_from_span":null},"id":393,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":17}},"generated_from_span":null},"id":394,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":17}},"generated_from_span":null},"id":395,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":21}},"generated_from_span":null},"id":396,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":601}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":21}},"generated_from_span":null},"id":398,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":601}},{"Use":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":20},"end":{"line":115,"col":21}},"generated_from_span":null},"id":399,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":12},"end":{"line":116,"col":19}},"generated_from_span":null},"id":401,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":12},"end":{"line":116,"col":19}},"generated_from_span":null},"id":402,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":611}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":8},"end":{"line":123,"col":9}},"generated_from_span":null},"id":471,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":12},"end":{"line":116,"col":19}},"generated_from_span":null},"statements":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":8},"end":{"line":123,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":36}},"generated_from_span":null},"id":404,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":405,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":21},"end":{"line":117,"col":22}},"generated_from_span":null},"id":406,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":21},"end":{"line":117,"col":22}},"generated_from_span":null},"id":407,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":548,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":549,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":550,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":551,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":13},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":34},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":23}},"generated_from_span":null},"id":410,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":34},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":411,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":33}},"generated_from_span":null},"id":412,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":33}},"generated_from_span":null},"id":413,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":602}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":602}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":34},"end":{"line":117,"col":35}},"generated_from_span":null},"id":414,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":34},"end":{"line":117,"col":35}},"generated_from_span":null},"id":415,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":552,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":553,"kind":{"Assign":[{"kind":{"Local":35},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Local":15},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":554,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":555,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":35},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":16},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":36},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":26},"end":{"line":117,"col":36}},"generated_from_span":null},"id":418,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":36},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":15},"end":{"line":117,"col":36}},"generated_from_span":null},"id":419,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":611}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":343}}},{"Move":{"kind":{"Local":14},"ty":{"Deduplicated":343}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":122,"col":13}},"generated_from_span":null},"id":468,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":122,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":420,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":421,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":422,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":423,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":424,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":16},"end":{"line":118,"col":25}},"generated_from_span":null},"id":425,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":16},"end":{"line":119,"col":30}},"generated_from_span":null},"id":426,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":122,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":429,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":430,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":431,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":432,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":35},"end":{"line":117,"col":36}},"generated_from_span":null},"id":433,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":43}},"generated_from_span":null},"id":434,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":435,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":28},"end":{"line":120,"col":29}},"generated_from_span":null},"id":436,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":28},"end":{"line":120,"col":29}},"generated_from_span":null},"id":437,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":540,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":541,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":542,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":543,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":19},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":30},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":30}},"generated_from_span":null},"id":440,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":30},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":441,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":40}},"generated_from_span":null},"id":442,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":40}},"generated_from_span":null},"id":443,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":602}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":602}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":41},"end":{"line":120,"col":42}},"generated_from_span":null},"id":444,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":41},"end":{"line":120,"col":42}},"generated_from_span":null},"id":445,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":601}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":544,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":545,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":1494}},{"Ref":{"place":{"kind":{"Local":21},"ty":{"Deduplicated":602}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":379}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":546,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":547,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":343}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":1494}}},{"Copy":{"kind":{"Local":22},"ty":{"Deduplicated":601}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":1493}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":33},"end":{"line":120,"col":43}},"generated_from_span":null},"id":448,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":343}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":32},"ty":{"Deduplicated":1493}},"Deref"]},"ty":{"Deduplicated":343}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":22},"end":{"line":120,"col":43}},"generated_from_span":null},"id":449,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":611}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":343}}},{"Move":{"kind":{"Local":20},"ty":{"Deduplicated":343}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":19},"end":{"line":122,"col":13}},"generated_from_span":null},"id":465,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":19},"end":{"line":122,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":450,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":451,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":452,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":453,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":454,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":121,"col":16},"end":{"line":121,"col":30}},"generated_from_span":null},"id":455,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":611}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":19},"end":{"line":122,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":458,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":459,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":460,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":461,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":42},"end":{"line":120,"col":43}},"generated_from_span":null},"id":462,"kind":{"StorageDead":18},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":12},"end":{"line":122,"col":13}},"generated_from_span":null},"id":466,"kind":{"StorageDead":17},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":12},"end":{"line":122,"col":13}},"generated_from_span":null},"id":469,"kind":{"StorageDead":11},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":123,"col":8},"end":{"line":123,"col":9}},"generated_from_span":null},"id":472,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":8},"end":{"line":124,"col":14}},"generated_from_span":null},"id":474,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":601}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":601}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":601}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":8},"end":{"line":124,"col":14}},"generated_from_span":null},"id":476,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":601}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":601}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":125,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":478,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":125,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":479,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":480,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":15}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":114,"col":10},"end":{"line":114,"col":15}},"generated_from_span":null},"id":481,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":14},"end":{"line":114,"col":15}},"generated_from_span":null},"id":484,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":125,"col":4},"end":{"line":125,"col":5}},"generated_from_span":null},"id":488,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":7},"end":{"line":126,"col":9}},"generated_from_span":null},"id":490,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":7},"end":{"line":126,"col":9}},"generated_from_span":null},"id":491,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":611}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":611}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":4},"end":{"line":130,"col":5}},"generated_from_span":null},"id":508,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":611}}},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":4},"end":{"line":130,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":127,"col":11},"end":{"line":127,"col":46}},"generated_from_span":null},"id":492,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":40},"end":{"line":127,"col":45}},"generated_from_span":null},"id":493,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":40},"end":{"line":127,"col":45}},"generated_from_span":null},"id":494,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":602}},{"Use":[{"Copy":{"kind":{"Local":1},"ty":{"Deduplicated":602}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":11},"end":{"line":127,"col":46}},"generated_from_span":null},"id":495,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":31}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":602}}}],"dest":{"kind":{"Local":25},"ty":{"Deduplicated":1022}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":45},"end":{"line":127,"col":46}},"generated_from_span":null},"id":496,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":8},"end":{"line":127,"col":47}},"generated_from_span":null},"id":497,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1280}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1022},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":1022}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":46},"end":{"line":127,"col":47}},"generated_from_span":null},"id":498,"kind":{"StorageDead":25},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":4},"end":{"line":130,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":46}},"generated_from_span":null},"id":500,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":39}},"generated_from_span":null},"id":501,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":39}},"generated_from_span":null},"id":502,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":649}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},1,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":12},"end":{"line":129,"col":46}},"generated_from_span":null},"id":503,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":649},{"Deduplicated":386}],"const_generics":[],"trait_refs":[{"Deduplicated":770}]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":649}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":386}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":45},"end":{"line":129,"col":46}},"generated_from_span":null},"id":504,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":8},"end":{"line":129,"col":47}},"generated_from_span":null},"id":505,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1280}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1022},{"Deduplicated":386}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":386}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":46},"end":{"line":129,"col":47}},"generated_from_span":null},"id":506,"kind":{"StorageDead":27},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":130,"col":4},"end":{"line":130,"col":5}},"generated_from_span":null},"id":509,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":0},"end":{"line":131,"col":1}},"generated_from_span":null},"id":510,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":0},"end":{"line":131,"col":1}},"generated_from_span":null},"id":511,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":0},"end":{"line":131,"col":1}},"generated_from_span":null},"id":512,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":1},"end":{"line":131,"col":1}},"generated_from_span":null},"id":513,"kind":"Return","comments_before":[]}]},"comments":[[106,["/ ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian."]],[111,["bytes < ℓ, most-significant byte first; the first differing byte decides."]]]}}},{"def_id":25,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}],"span":{"data":{"file_id":18,"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":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1732,{"TraitType":[{"HashConsedValue":[1731,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}]},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"output":{"Deduplicated":1688}},"src":{"TraitDecl":{"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":26,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}],"span":{"data":{"file_id":18,"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":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1688}],"output":{"HashConsedValue":[1734,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1733,{"TraitType":[{"Deduplicated":1731},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"Deduplicated":1732}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitDecl":{"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":1},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":27,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}],"span":{"data":{"file_id":18,"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":4,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1689}],"output":{"Deduplicated":1688}},"src":{"TraitDecl":{"trait_ref":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":28,"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":6,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1688}],"output":{"Deduplicated":1689}},"src":{"TraitDecl":{"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":29,"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":386},"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":386}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":30,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["neg",0]}],"span":{"data":{"file_id":19,"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":7,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1688}],"output":{"Deduplicated":1689}},"src":{"TraitDecl":{"trait_ref":{"id":7,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":31,"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":1022},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}],"span":{"data":{"file_id":16,"beg":{"line":235,"col":4},"end":{"line":235,"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":602}],"output":{"Deduplicated":1022}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":32,"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":106,"col":4},"end":{"line":109,"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":602}},"src":"TopLevel","is_global_initializer":1,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":106,"col":4},"end":{"line":109,"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":106,"col":19},"end":{"line":106,"col":27}},"generated_from_span":null},"ty":{"Deduplicated":602}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":106,"col":4},"end":{"line":109,"col":6}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":106,"col":30},"end":{"line":109,"col":5}},"generated_from_span":null},"id":514,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":602}},{"Aggregate":[{"Array":[{"Deduplicated":343},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":601}}]},[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","237"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","211"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","245"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","92"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","26"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","99"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","18"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","88"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","214"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","156"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","247"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","162"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","249"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","20"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":343}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","16"]}}},"ty":{"Deduplicated":343}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":106,"col":4},"end":{"line":109,"col":6}},"generated_from_span":null},"id":515,"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":106,"col":4},"end":{"line":109,"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":602},"src":"TopLevel","global_kind":"NamedConst","value":{"kind":{"Call":[{"kind":{"Fun":{"Regular":32}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},[]]},"ty":{"Deduplicated":602}}}],"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":1689}],"output":{"Deduplicated":1688}},"item":{"id":18,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1703,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":1,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["marker",0]},{"Ident":["Destruct",0]}],"span":{"data":{"file_id":17,"beg":{"line":1062,"col":0},"end":{"line":1062,"col":38}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" A marker for types that can be dropped."},{"DocComment":""},{"DocComment":" This should be used for `[const]` bounds,"},{"DocComment":" as non-const bounds will always hold for every type."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"destruct"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"drop_glue","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":true,"abi":"Rust","inputs":[{"HashConsedValue":[1704,{"Ref":[{"Var":{"Bound":[0,0]}},{"Deduplicated":1688},"Mut"]}]}],"output":{"Deduplicated":379}},"item":{"id":8,"generics":{"regions":[{"Var":{"Bound":[0,0]}}],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":2,"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":1689}],"output":{"Deduplicated":1699}},"item":{"id":22,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1705,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[2,0]}}],"vtable":null},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}],"span":{"data":{"file_id":18,"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":18,"beg":{"line":133,"col":21},"end":{"line":133,"col":41}},"generated_from_span":null},"origin":"WhereClauseOnTrait","trait_":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"HashConsedValue":[1707,{"TraitType":[{"HashConsedValue":[1706,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[]}}}}]},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"const_generics":[],"trait_refs":[]}}}},{"clause_id":1,"span":{"data":{"file_id":18,"beg":{"line":160,"col":19},"end":{"line":160,"col":41}},"generated_from_span":null},"origin":{"TraitItem":1},"trait_":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1707},{"HashConsedValue":[1708,{"TraitType":[{"Deduplicated":1706},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"HashConsedValue":[1709,{"TraitType":[{"Deduplicated":1706},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":[3,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":[3,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":[3,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":1708}],"output":{"Deduplicated":1688}},"item":{"id":25,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[{"Deduplicated":1706}]}}},"kind":{"TraitMethod":[3,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":1688}],"output":{"HashConsedValue":[1710,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":1707},{"Deduplicated":1708}],"const_generics":[],"trait_refs":[]}}}]}},"item":{"id":26,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"const_generics":[],"trait_refs":[{"Deduplicated":1706}]}}},"kind":{"TraitMethod":[3,1]}}],"vtable":null},{"def_id":4,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}],"span":{"data":{"file_id":18,"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":1689}],"output":{"Deduplicated":1688}},"item":{"id":27,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1711,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[4,0]}}],"vtable":null},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}],"span":{"data":{"file_id":18,"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":[1713,{"kind":{"ParentClause":[{"HashConsedValue":[1712,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}}]},0]},"trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}}]},"type_id":0,"ty":{"Deduplicated":1689}}},{"regions":[],"skip_binder":{"trait_ref":{"Deduplicated":1713},"type_id":1,"ty":{"Deduplicated":1688}}}]},"implied_clauses":[{"clause_id":0,"span":{"data":{"file_id":18,"beg":{"line":368,"col":18},"end":{"line":368,"col":58}},"generated_from_span":null},"origin":{"TraitItem":0},"trait_":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1698}],"const_generics":[],"trait_refs":[]}}}}],"consts":[],"types":[null],"methods":[],"vtable":null},{"def_id":6,"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":1688}],"output":{"Deduplicated":1689}},"item":{"id":28,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1714,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[6,0]}}],"vtable":null},{"def_id":7,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]}],"span":{"data":{"file_id":19,"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":1688}],"output":{"Deduplicated":1689}},"item":{"id":30,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1715,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":7,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[7,0]}}],"vtable":{"id":{"Adt":12},"generics":{"regions":[],"types":[{"Deduplicated":1689}],"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":207,"col":0},"end":{"line":213,"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":2,"generics":{"regions":[],"types":[{"Deduplicated":420},{"Deduplicated":1692},{"Deduplicated":386}],"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":[2,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":3,"generics":{"regions":[],"types":[{"Deduplicated":1693}],"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":[1696,{"kind":{"TraitImpl":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1694,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1689},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1693},{"Deduplicated":1695}],"const_generics":[],"trait_refs":[]}}}}]},{"HashConsedValue":[1697,{"kind":{"TraitImpl":{"id":8,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1695},{"Deduplicated":1688},{"Deduplicated":1693}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1688},"implied_trait_refs":[]},"kind":{"TraitType":[3,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1695},"implied_trait_refs":[]},"kind":{"TraitType":[3,1]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1693},"implied_trait_refs":[]},"kind":{"TraitType":[3,2]}}],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":17,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[3,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[3,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":4,"generics":{"regions":[],"types":[{"Deduplicated":1699},{"Deduplicated":1695}],"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":1698},{"Deduplicated":1689}],"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":1688},{"Deduplicated":1689},{"Deduplicated":1698}],"const_generics":[],"trait_refs":[{"Deduplicated":1700}]}},"kind":{"TraitMethod":[4,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":1688},{"Deduplicated":1688}],"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":19,"generics":{"regions":[],"types":[{"Deduplicated":1688}],"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":6,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"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":1689},{"Deduplicated":1688}],"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":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[{"Deduplicated":1701}]}},"kind":{"TraitMethod":[6,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":106,"col":0},"end":{"line":116,"col":1}},"generated_from_span":null},"source_text":"impl From<InternalError> for SignatureError {\n #[cfg(not(feature = \"alloc\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"alloc\")]\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":386},{"Deduplicated":649}],"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":20,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":6,"item_meta":{"name":[{"Ident":["sha2",0]},{"Ident":["Sha512",0]},{"Impl":{"Trait":6}}],"span":{"data":{"file_id":14,"beg":{"line":12,"col":8},"end":{"line":15,"col":9}},"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":1,"generics":{"regions":[],"types":[{"Deduplicated":994}],"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":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":21,"generics":{"regions":[{"Var":{"Bound":[0,0]}}],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":7,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":7}}],"span":{"data":{"file_id":11,"beg":{"line":871,"col":0},"end":{"line":871,"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":7,"generics":{"regions":[],"types":[{"Deduplicated":1038},{"Deduplicated":1038}],"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":12,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[7,0]}}],"vtable":{"id":0,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},{"def_id":8,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":8}}],"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":5,"generics":{"regions":[],"types":[{"Deduplicated":1695},{"Deduplicated":1688},{"Deduplicated":1693}],"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":[1702,{"kind":{"TraitImpl":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1688},{"Deduplicated":1689}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1693}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[null],"methods":[],"vtable":null}],"ordered_decls":[{"TraitDecl":{"NonRec":0}},{"Fun":{"NonRec":18}},{"Fun":{"NonRec":6}},{"Fun":{"NonRec":19}},{"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":11}},{"Fun":{"NonRec":14}},{"Fun":{"NonRec":12}},{"Type":{"NonRec":10}},{"Fun":{"NonRec":13}},{"Fun":{"NonRec":31}},{"Fun":{"NonRec":11}},{"Type":{"NonRec":9}},{"Fun":{"NonRec":21}},{"Type":{"NonRec":1}},{"Fun":{"NonRec":15}},{"Type":{"NonRec":3}},{"Fun":{"NonRec":29}},{"Type":{"NonRec":8}},{"Fun":{"NonRec":20}},{"TraitImpl":{"NonRec":5}},{"Type":{"NonRec":4}},{"Fun":{"NonRec":23}},{"Fun":{"NonRec":32}},{"Global":{"NonRec":1}},{"Fun":{"NonRec":24}},{"Fun":{"NonRec":16}},{"Fun":{"NonRec":2}},{"Type":{"NonRec":0}},{"Fun":{"NonRec":7}},{"Fun":{"NonRec":9}},{"Fun":{"NonRec":10}},{"Fun":{"NonRec":1}},{"Fun":{"NonRec":0}}]},"has_errors":false} |