mirror of
https://github.com/saymrwulf/risc0-ed25519-verified.git
synced 2026-09-04 20:03:41 +00:00
(verify_accepts_iff_decompress, button-enforced)
Port of the dalek decompress chain to the risc0 fork (v4 gen):
- source patch 8b69091: decompress step_2 negate-then-conditional-assign
(the documented sqrt_ratio_i rewrite; sqrt_ratio_i itself was already
in the compatible shape); extract.sh: decompress un-opaqued,
re-extracted - the step_1/step_2 external axioms vanish from the
template, decompress is transparent.
- Proofs/DecompressSpec.lean: dalek port, instance rename
Shared0FieldElement51 -> SharedAFieldElement51.
- Proofs/FromBytesSpec.lean: PORT DELTA - this gen's from_bytes takes
RangeFrom subslices (bytes[k..]) into a local load8 CLOSURE with
literal indices instead of dalek's named load8_at: new
range_from_index_spec (over the step_simps-reduced slice index) +
closure_call_spec (same disjoint-OR loader math); window/telescope
arithmetic identical.
- Proofs/DecompressMain.lean: decompress_of_canonical (standard three)
+ verify_accepts_iff_decompress (corollary verbatim - this fork's
point-equation signature is byte-identical to dalek's):
accept <=> decompress(R) = [k]*(-A) + [s]*B (as points).
check.sh: 4-tier Phase 3b; full-lift cone exactly [3 standard +
Signature + sha512_hash3 + to_bytes + Error + Error.new]. Full button
green fresh.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 line
No EOL
334 KiB
Rust
1 line
No EOL
334 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_hash3","crate::signature::compressed_from_bytes","curve25519_dalek","sha2","digest","ed25519","signature","subtle","zeroize","block_buffer","crypto_common"],"exclude":["generic_array","typenum"],"extract_opaque_bodies":false,"translate_all_methods":false,"duplicate_defaulted_methods":true,"lift_associated_types":["*"],"hide_marker_traits":true,"remove_adt_clauses":true,"hide_allocator":true,"remove_unused_self_clauses":true,"desugar_drops":false,"ops_to_function_calls":true,"index_to_function_calls":true,"treat_box_as_builtin":true,"raw_consts":false,"unsized_strings":false,"reconstruct_fallible_operations":true,"reconstruct_asserts":true,"unbind_item_vars":true,"print_original_ullbc":false,"print_ullbc":false,"print_built_llbc":false,"print_llbc":false,"dest_dir":null,"dest_file":"/home/oho/GitClone/Claude/FormalVerification/risc0-ed25519-verified/verification/CurveSig.llbc","no_dedup_serialized_ast":false,"format":null,"no_serialize":false,"no_typecheck":false,"no_normalize":false,"abort_on_error":false,"error_on_warnings":false,"preset":"Aeneas"},"target_information":[{"key":"x86_64-unknown-linux-gnu","value":{"target_pointer_size":8,"is_little_endian":true}}],"files":[{"id":0,"name":{"Local":"ed25519-dalek/src/verifying.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! ed25519 public keys.\n\nuse core::fmt::Debug;\nuse core::hash::{Hash, Hasher};\n\nuse curve25519_dalek::{\n digest::{generic_array::typenum::U64, Digest},\n edwards::{CompressedEdwardsY, EdwardsPoint},\n montgomery::MontgomeryPoint,\n scalar::Scalar,\n};\n\nuse ed25519::signature::Verifier;\n\nuse sha2::Sha512;\n\n#[cfg(feature = \"pkcs8\")]\nuse ed25519::pkcs8;\n\n#[cfg(feature = \"serde\")]\nuse serde::{Deserialize, Deserializer, Serialize, Serializer};\n\n#[cfg(feature = \"digest\")]\nuse crate::context::Context;\n#[cfg(feature = \"digest\")]\nuse signature::DigestVerifier;\n\nuse crate::{\n constants::PUBLIC_KEY_LENGTH,\n errors::{InternalError, SignatureError},\n hazmat::ExpandedSecretKey,\n signature::InternalSignature,\n signing::SigningKey,\n};\n\n/// An ed25519 public key.\n///\n/// # Note\n///\n/// The `Eq` and `Hash` impls here use the compressed Edwards y encoding, _not_ the algebraic\n/// representation. This means if this `VerifyingKey` is non-canonically encoded, it will be\n/// considered unequal to the other equivalent encoding, despite the two representing the same\n/// point. More encoding details can be found\n/// [here](https://hdevalence.ca/blog/2020-10-04-its-25519am).\n/// If you want to make sure that signatures produced with respect to those sorts of public keys\n/// are rejected, use [`VerifyingKey::verify_strict`].\n// Invariant: VerifyingKey.1 is always the decompression of VerifyingKey.0\n#[derive(Copy, Clone, Default, Eq)]\npub struct VerifyingKey {\n /// Serialized compressed Edwards-y point.\n pub(crate) compressed: CompressedEdwardsY,\n\n /// Decompressed Edwards point used for curve arithmetic operations.\n pub(crate) point: EdwardsPoint,\n}\n\nimpl Debug for VerifyingKey {\n fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(f, \"VerifyingKey({:?}), {:?})\", self.compressed, self.point)\n }\n}\n\nimpl AsRef<[u8]> for VerifyingKey {\n fn as_ref(&self) -> &[u8] {\n self.as_bytes()\n }\n}\n\nimpl Hash for VerifyingKey {\n fn hash<H: Hasher>(&self, state: &mut H) {\n self.as_bytes().hash(state);\n }\n}\n\nimpl PartialEq<VerifyingKey> for VerifyingKey {\n fn eq(&self, other: &VerifyingKey) -> bool {\n self.as_bytes() == other.as_bytes()\n }\n}\n\nimpl From<&ExpandedSecretKey> for VerifyingKey {\n /// Derive this public key from its corresponding `ExpandedSecretKey`.\n fn from(expanded_secret_key: &ExpandedSecretKey) -> VerifyingKey {\n VerifyingKey::from(EdwardsPoint::mul_base(&expanded_secret_key.scalar))\n }\n}\n\nimpl From<&SigningKey> for VerifyingKey {\n fn from(signing_key: &SigningKey) -> VerifyingKey {\n signing_key.verifying_key()\n }\n}\n\nimpl From<EdwardsPoint> for VerifyingKey {\n fn from(point: EdwardsPoint) -> VerifyingKey {\n VerifyingKey {\n point,\n compressed: point.compress(),\n }\n }\n}\n\nimpl VerifyingKey {\n /// Convert this public key to a byte array.\n #[inline]\n pub fn to_bytes(&self) -> [u8; PUBLIC_KEY_LENGTH] {\n self.compressed.to_bytes()\n }\n\n /// View this public key as a byte array.\n #[inline]\n pub fn as_bytes(&self) -> &[u8; PUBLIC_KEY_LENGTH] {\n &(self.compressed).0\n }\n\n /// Construct a `VerifyingKey` from a slice of bytes.\n ///\n /// # Warning\n ///\n /// The caller is responsible for ensuring that the bytes passed into this\n /// method actually represent a `curve25519_dalek::curve::CompressedEdwardsY`\n /// and that said compressed point is actually a point on the curve.\n ///\n /// # Example\n ///\n /// ```\n /// use ed25519_dalek::VerifyingKey;\n /// use ed25519_dalek::PUBLIC_KEY_LENGTH;\n /// use ed25519_dalek::SignatureError;\n ///\n /// # fn doctest() -> Result<VerifyingKey, SignatureError> {\n /// let public_key_bytes: [u8; PUBLIC_KEY_LENGTH] = [\n /// 215, 90, 152, 1, 130, 177, 10, 183, 213, 75, 254, 211, 201, 100, 7, 58,\n /// 14, 225, 114, 243, 218, 166, 35, 37, 175, 2, 26, 104, 247, 7, 81, 26];\n ///\n /// let public_key = VerifyingKey::from_bytes(&public_key_bytes)?;\n /// #\n /// # Ok(public_key)\n /// # }\n /// #\n /// # fn main() {\n /// # doctest();\n /// # }\n /// ```\n ///\n /// # Returns\n ///\n /// A `Result` whose okay value is an EdDSA `VerifyingKey` or whose error value\n /// is a `SignatureError` describing the error that occurred.\n #[inline]\n pub fn from_bytes(bytes: &[u8; PUBLIC_KEY_LENGTH]) -> Result<VerifyingKey, SignatureError> {\n let compressed = CompressedEdwardsY(*bytes);\n let point = compressed\n .decompress()\n .ok_or(InternalError::PointDecompression)?;\n\n // Invariant: VerifyingKey.1 is always the decompression of VerifyingKey.0\n Ok(VerifyingKey { compressed, point })\n }\n\n /// Create a verifying context that can be used for Ed25519ph with\n /// [`DigestVerifier`].\n #[cfg(feature = \"digest\")]\n pub fn with_context<'k, 'v>(\n &'k self,\n context_value: &'v [u8],\n ) -> Result<Context<'k, 'v, Self>, SignatureError> {\n Context::new(self, context_value)\n }\n\n /// Returns whether this is a _weak_ public key, i.e., if this public key has low order.\n ///\n /// A weak public key can be used to generate a signature that's valid for almost every\n /// message. [`Self::verify_strict`] denies weak keys, but if you want to check for this\n /// property before verification, then use this method.\n pub fn is_weak(&self) -> bool {\n self.point.is_small_order()\n }\n\n // A helper function that computes `H(R || A || M)` where `H` is the 512-bit hash function\n // given by `CtxDigest` (this is SHA-512 in spec-compliant Ed25519). If `context.is_some()`,\n // this does the prehashed variant of the computation using its contents.\n #[allow(non_snake_case)]\n fn compute_challenge<CtxDigest>(\n context: Option<&[u8]>,\n R: &CompressedEdwardsY,\n A: &CompressedEdwardsY,\n M: &[u8],\n ) -> Scalar\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let mut h = CtxDigest::new();\n if let Some(c) = context {\n h.update(b\"SigEd25519 no Ed25519 collisions\");\n h.update([1]); // Ed25519ph\n h.update([c.len() as u8]);\n h.update(c);\n }\n h.update(R.as_bytes());\n h.update(A.as_bytes());\n h.update(M);\n\n Scalar::from_hash(h)\n }\n\n // Helper function for verification. Computes the _expected_ R component of the signature. The\n // caller compares this to the real R component. If `context.is_some()`, this does the\n // prehashed variant of the computation using its contents.\n // Note that this returns the compressed form of R and the caller does a byte comparison. This\n // means that all our verification functions do not accept non-canonically encoded R values.\n // See the validation criteria blog post for more details:\n // https://hdevalence.ca/blog/2020-10-04-its-25519am\n #[allow(non_snake_case)]\n fn recompute_R<CtxDigest>(\n &self,\n context: Option<&[u8]>,\n signature: &InternalSignature,\n M: &[u8],\n ) -> CompressedEdwardsY\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let k = Self::compute_challenge::<CtxDigest>(context, &signature.R, &self.compressed, M);\n let minus_A: EdwardsPoint = -self.point;\n // Recall the (non-batched) verification equation: -[k]A + [s]B = R\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &(minus_A), &signature.s).compress()\n }\n\n /// The ordinary non-batched Ed25519 verification check, rejecting non-canonical R values. (see\n /// [`Self::recompute_R`]). `CtxDigest` is the digest used to calculate the pseudorandomness\n /// needed for signing. According to the spec, `CtxDigest = Sha512`.\n ///\n /// This definition is loose in its parameters so that end-users of the `hazmat` module can\n /// change how the `ExpandedSecretKey` is calculated and which hash function to use.\n #[allow(non_snake_case)]\n pub(crate) fn raw_verify<CtxDigest>(\n &self,\n message: &[u8],\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n CtxDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let expected_R = self.recompute_R::<CtxDigest>(None, &signature, message);\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// The prehashed non-batched Ed25519 verification check, rejecting non-canonical R values.\n /// (see [`Self::recompute_R`]). `CtxDigest` is the digest used to calculate the\n /// pseudorandomness needed for signing. `MsgDigest` is the digest used to hash the signed\n /// message. According to the spec, `MsgDigest = CtxDigest = Sha512`.\n ///\n /// This definition is loose in its parameters so that end-users of the `hazmat` module can\n /// change how the `ExpandedSecretKey` is calculated and which hash function to use.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub(crate) fn raw_verify_prehashed<CtxDigest, MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n CtxDigest: Digest<OutputSize = U64>,\n MsgDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let ctx: &[u8] = context.unwrap_or(b\"\");\n debug_assert!(\n ctx.len() <= 255,\n \"The context must not be longer than 255 octets.\"\n );\n\n let message = prehashed_message.finalize();\n let expected_R = self.recompute_R::<CtxDigest>(Some(ctx), &signature, &message);\n\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Verify a `signature` on a `prehashed_message` using the Ed25519ph algorithm.\n ///\n /// # Inputs\n ///\n /// * `prehashed_message` is an instantiated hash digest with 512-bits of\n /// output which has had the message to be signed previously fed into its\n /// state.\n /// * `context` is an optional context string, up to 255 bytes inclusive,\n /// which may be used to provide additional domain separation. If not\n /// set, this will default to an empty string.\n /// * `signature` is a purported Ed25519ph signature on the `prehashed_message`.\n ///\n /// # Returns\n ///\n /// Returns `true` if the `signature` was a valid signature created by this\n /// [`SigningKey`] on the `prehashed_message`.\n ///\n /// # Note\n ///\n /// The RFC only permits SHA-512 to be used for prehashing, i.e., `MsgDigest = Sha512`. This\n /// function technically works, and is probably safe to use, with any secure hash function with\n /// 512-bit digests, but anything outside of SHA-512 is NOT specification-compliant. We expose\n /// [`crate::Sha512`] for user convenience.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub fn verify_prehashed<MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n MsgDigest: Digest<OutputSize = U64>,\n {\n self.raw_verify_prehashed::<Sha512, MsgDigest>(prehashed_message, context, signature)\n }\n\n /// Strictly verify a signature on a message with this keypair's public key.\n ///\n /// # On The (Multiple) Sources of Malleability in Ed25519 Signatures\n ///\n /// This version of verification is technically non-RFC8032 compliant. The\n /// following explains why.\n ///\n /// 1. Scalar Malleability\n ///\n /// The authors of the RFC explicitly stated that verification of an ed25519\n /// signature must fail if the scalar `s` is not properly reduced mod $\\ell$:\n ///\n /// > To verify a signature on a message M using public key A, with F\n /// > being 0 for Ed25519ctx, 1 for Ed25519ph, and if Ed25519ctx or\n /// > Ed25519ph is being used, C being the context, first split the\n /// > signature into two 32-octet halves. Decode the first half as a\n /// > point R, and the second half as an integer S, in the range\n /// > 0 <= s < L. Decode the public key A as point A'. If any of the\n /// > decodings fail (including S being out of range), the signature is\n /// > invalid.)\n ///\n /// All `verify_*()` functions within ed25519-dalek perform this check.\n ///\n /// 2. Point malleability\n ///\n /// The authors of the RFC added in a malleability check to step #3 in\n /// §5.1.7, for small torsion components in the `R` value of the signature,\n /// *which is not strictly required*, as they state:\n ///\n /// > Check the group equation \\[8\\]\\[S\\]B = \\[8\\]R + \\[8\\]\\[k\\]A'. It's\n /// > sufficient, but not required, to instead check \\[S\\]B = R + \\[k\\]A'.\n ///\n /// # History of Malleability Checks\n ///\n /// As originally defined (cf. the \"Malleability\" section in the README of\n /// this repo), ed25519 signatures didn't consider *any* form of\n /// malleability to be an issue. Later the scalar malleability was\n /// considered important. Still later, particularly with interests in\n /// cryptocurrency design and in unique identities (e.g. for Signal users,\n /// Tor onion services, etc.), the group element malleability became a\n /// concern.\n ///\n /// However, libraries had already been created to conform to the original\n /// definition. One well-used library in particular even implemented the\n /// group element malleability check, *but only for batch verification*!\n /// Which meant that even using the same library, a single signature could\n /// verify fine individually, but suddenly, when verifying it with a bunch\n /// of other signatures, the whole batch would fail!\n ///\n /// # \"Strict\" Verification\n ///\n /// This method performs *both* of the above signature malleability checks.\n ///\n /// It must be done as a separate method because one doesn't simply get to\n /// change the definition of a cryptographic primitive ten years\n /// after-the-fact with zero consideration for backwards compatibility in\n /// hardware and protocols which have it already have the older definition\n /// baked in.\n ///\n /// # Return\n ///\n /// Returns `Ok(())` if the signature is valid, and `Err` otherwise.\n #[allow(non_snake_case)]\n pub fn verify_strict(\n &self,\n message: &[u8],\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n let signature = InternalSignature::try_from(signature)?;\n\n let signature_R = signature\n .R\n .decompress()\n .ok_or_else(|| SignatureError::from(InternalError::Verify))?;\n\n // Logical OR is fine here as we're not trying to be constant time.\n if signature_R.is_small_order() || self.point.is_small_order() {\n return Err(InternalError::Verify.into());\n }\n\n let expected_R = self.recompute_R::<Sha512>(None, &signature, message);\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Verify a `signature` on a `prehashed_message` using the Ed25519ph algorithm,\n /// using strict signture checking as defined by [`Self::verify_strict`].\n ///\n /// # Inputs\n ///\n /// * `prehashed_message` is an instantiated hash digest with 512-bits of\n /// output which has had the message to be signed previously fed into its\n /// state.\n /// * `context` is an optional context string, up to 255 bytes inclusive,\n /// which may be used to provide additional domain separation. If not\n /// set, this will default to an empty string.\n /// * `signature` is a purported Ed25519ph signature on the `prehashed_message`.\n ///\n /// # Returns\n ///\n /// Returns `true` if the `signature` was a valid signature created by this\n /// [`SigningKey`] on the `prehashed_message`.\n ///\n /// # Note\n ///\n /// The RFC only permits SHA-512 to be used for prehashing, i.e., `MsgDigest = Sha512`. This\n /// function technically works, and is probably safe to use, with any secure hash function with\n /// 512-bit digests, but anything outside of SHA-512 is NOT specification-compliant. We expose\n /// [`crate::Sha512`] for user convenience.\n #[cfg(feature = \"digest\")]\n #[allow(non_snake_case)]\n pub fn verify_prehashed_strict<MsgDigest>(\n &self,\n prehashed_message: MsgDigest,\n context: Option<&[u8]>,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError>\n where\n MsgDigest: Digest<OutputSize = U64>,\n {\n let signature = InternalSignature::try_from(signature)?;\n\n let ctx: &[u8] = context.unwrap_or(b\"\");\n debug_assert!(\n ctx.len() <= 255,\n \"The context must not be longer than 255 octets.\"\n );\n\n let signature_R = signature\n .R\n .decompress()\n .ok_or_else(|| SignatureError::from(InternalError::Verify))?;\n\n // Logical OR is fine here as we're not trying to be constant time.\n if signature_R.is_small_order() || self.point.is_small_order() {\n return Err(InternalError::Verify.into());\n }\n\n let message = prehashed_message.finalize();\n let expected_R = self.recompute_R::<Sha512>(Some(ctx), &signature, &message);\n\n if expected_R == signature.R {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n }\n\n /// Convert this verifying key into Montgomery form.\n ///\n /// This can be used for performing X25519 Diffie-Hellman using Ed25519 keys. The output of\n /// this function is a valid X25519 public key whose secret key is `sk.to_scalar_bytes()`,\n /// where `sk` is a valid signing key for this `VerifyingKey`.\n ///\n /// # Note\n ///\n /// We do NOT recommend this usage of a signing/verifying key. Signing keys are usually\n /// long-term keys, while keys used for key exchange should rather be ephemeral. If you can\n /// help it, use a separate key for encryption.\n ///\n /// For more information on the security of systems which use the same keys for both signing\n /// and Diffie-Hellman, see the paper\n /// [On using the same key pair for Ed25519 and an X25519 based KEM](https://eprint.iacr.org/2021/509).\n pub fn to_montgomery(&self) -> MontgomeryPoint {\n self.point.to_montgomery()\n }\n\n /// Return this verifying key in Edwards form.\n pub fn to_edwards(&self) -> EdwardsPoint {\n self.point\n }\n}\n\nimpl Verifier<ed25519::Signature> for VerifyingKey {\n /// Verify a signature on a message with this keypair's public key.\n ///\n /// # Return\n ///\n /// Returns `Ok(())` if the signature is valid, and `Err` otherwise.\n fn verify(&self, message: &[u8], signature: &ed25519::Signature) -> Result<(), SignatureError> {\n self.raw_verify::<Sha512>(message, signature)\n }\n}\n\n/// Equivalent to [`VerifyingKey::verify_prehashed`] with `context` set to [`None`].\n#[cfg(feature = \"digest\")]\nimpl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for VerifyingKey\nwhere\n MsgDigest: Digest<OutputSize = U64>,\n{\n fn verify_digest(\n &self,\n msg_digest: MsgDigest,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n self.verify_prehashed(msg_digest, None, signature)\n }\n}\n\n/// Equivalent to [`VerifyingKey::verify_prehashed`] with `context` set to [`Some`]\n/// containing `self.value()`.\n#[cfg(feature = \"digest\")]\nimpl<MsgDigest> DigestVerifier<MsgDigest, ed25519::Signature> for Context<'_, '_, VerifyingKey>\nwhere\n MsgDigest: Digest<OutputSize = U64>,\n{\n fn verify_digest(\n &self,\n msg_digest: MsgDigest,\n signature: &ed25519::Signature,\n ) -> Result<(), SignatureError> {\n self.key()\n .verify_prehashed(msg_digest, Some(self.value()), signature)\n }\n}\n\nimpl TryFrom<&[u8]> for VerifyingKey {\n type Error = SignatureError;\n\n #[inline]\n fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {\n let bytes = bytes.try_into().map_err(|_| InternalError::BytesLength {\n name: \"VerifyingKey\",\n length: PUBLIC_KEY_LENGTH,\n })?;\n Self::from_bytes(bytes)\n }\n}\n\nimpl From<VerifyingKey> for EdwardsPoint {\n fn from(vk: VerifyingKey) -> EdwardsPoint {\n vk.point\n }\n}\n\n#[cfg(all(feature = \"alloc\", feature = \"pkcs8\"))]\nimpl pkcs8::EncodePublicKey for VerifyingKey {\n fn to_public_key_der(&self) -> pkcs8::spki::Result<pkcs8::Document> {\n pkcs8::PublicKeyBytes::from(self).to_public_key_der()\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<pkcs8::PublicKeyBytes> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(pkcs8_key: pkcs8::PublicKeyBytes) -> pkcs8::spki::Result<Self> {\n VerifyingKey::try_from(&pkcs8_key)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<&pkcs8::PublicKeyBytes> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(pkcs8_key: &pkcs8::PublicKeyBytes) -> pkcs8::spki::Result<Self> {\n VerifyingKey::from_bytes(pkcs8_key.as_ref()).map_err(|_| pkcs8::spki::Error::KeyMalformed)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl From<VerifyingKey> for pkcs8::PublicKeyBytes {\n fn from(verifying_key: VerifyingKey) -> pkcs8::PublicKeyBytes {\n pkcs8::PublicKeyBytes::from(&verifying_key)\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl From<&VerifyingKey> for pkcs8::PublicKeyBytes {\n fn from(verifying_key: &VerifyingKey) -> pkcs8::PublicKeyBytes {\n pkcs8::PublicKeyBytes(verifying_key.to_bytes())\n }\n}\n\n#[cfg(feature = \"pkcs8\")]\nimpl TryFrom<pkcs8::spki::SubjectPublicKeyInfoRef<'_>> for VerifyingKey {\n type Error = pkcs8::spki::Error;\n\n fn try_from(public_key: pkcs8::spki::SubjectPublicKeyInfoRef<'_>) -> pkcs8::spki::Result<Self> {\n pkcs8::PublicKeyBytes::try_from(public_key)?.try_into()\n }\n}\n\n#[cfg(feature = \"serde\")]\nimpl Serialize for VerifyingKey {\n fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>\n where\n S: Serializer,\n {\n serializer.serialize_bytes(&self.as_bytes()[..])\n }\n}\n\n#[cfg(feature = \"serde\")]\nimpl<'d> Deserialize<'d> for VerifyingKey {\n fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>\n where\n D: Deserializer<'d>,\n {\n struct VerifyingKeyVisitor;\n\n impl<'de> serde::de::Visitor<'de> for VerifyingKeyVisitor {\n type Value = VerifyingKey;\n\n fn expecting(&self, formatter: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(formatter, concat!(\"An ed25519 verifying (public) key\"))\n }\n\n fn visit_bytes<E: serde::de::Error>(self, bytes: &[u8]) -> Result<Self::Value, E> {\n VerifyingKey::try_from(bytes).map_err(E::custom)\n }\n\n fn visit_seq<A>(self, mut seq: A) -> Result<Self::Value, A::Error>\n where\n A: serde::de::SeqAccess<'de>,\n {\n let mut bytes = [0u8; 32];\n\n #[allow(clippy::needless_range_loop)]\n for i in 0..32 {\n bytes[i] = seq\n .next_element()?\n .ok_or_else(|| serde::de::Error::invalid_length(i, &\"expected 32 bytes\"))?;\n }\n\n let remaining = (0..)\n .map(|_| seq.next_element::<u8>())\n .take_while(|el| matches!(el, Ok(Some(_))))\n .count();\n\n if remaining > 0 {\n return Err(serde::de::Error::invalid_length(\n 32 + remaining,\n &\"expected 32 bytes\",\n ));\n }\n\n VerifyingKey::try_from(&bytes[..]).map_err(serde::de::Error::custom)\n }\n }\n\n deserializer.deserialize_bytes(VerifyingKeyVisitor)\n }\n}\n\n// ─────────────────────────────────────────────────────────────────────────────\n// AENEAS-COMPAT (formal verification): monomorphic SHA-512 verification path.\n//\n// `raw_verify::<CtxDigest>`'s generic `Digest<OutputSize = U64>` bound drags\n// the typenum/hybrid-array type-level machinery through the extractor, which\n// cannot translate it (mixed type/function recursion groups). The functions\n// below are the EXACT unrolling of `raw_verify::<Sha512>` with\n// `prehash_ctx = None` and a single message slice — the path the `Verifier`\n// impl takes — with the digest fixed to the concrete `Sha512` type and every\n// digest-trait call isolated behind a monomorphic wrapper (extracted opaque,\n// so no generic signature ever reaches the translator):\n// sha512_new/sha512_update/sha512_finalize_bytes = Digest::new/update/\n// finalize∘into at D = Sha512\n// Scalar::from_hash(h) = Scalar::from_bytes_mod_order_wide(&finalize(h))\n// (from_hash's definition, unrolled)\n// Semantics identical; pure refactor for extraction only.\n// ─────────────────────────────────────────────────────────────────────────────\n\n/// AENEAS-COMPAT: the whole three-part hash as ONE monomorphic call whose\n/// signature carries no foreign types (this fork's sha2-0.10 `Sha512` type\n/// alias cannot be declared opaque by the extractor). Semantically:\n/// `Sha512::new().chain(r).chain(a).chain(m).finalize()`.\npub(crate) fn sha512_hash3(r: &[u8], a: &[u8], m: &[u8]) -> [u8; 64] {\n let mut h: Sha512 = Digest::new();\n Digest::update(&mut h, r);\n Digest::update(&mut h, a);\n Digest::update(&mut h, m);\n Digest::finalize(h).into()\n}\n\n#[allow(non_snake_case)]\npub(crate) fn recompute_r_sha512(\n key: &VerifyingKey,\n sig: &InternalSignature,\n message: &[u8],\n) -> CompressedEdwardsY {\n let k = Scalar::from_bytes_mod_order_wide(&sha512_hash3(\n sig.R.as_bytes(),\n key.compressed.as_bytes(),\n message,\n ));\n\n let minus_A: EdwardsPoint = -key.point;\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &minus_A, &sig.s).compress()\n}\n\n#[allow(non_snake_case)]\npub(crate) fn verify_sha512(\n key: &VerifyingKey,\n message: &[u8],\n sig: &ed25519::Signature,\n) -> Result<(), SignatureError> {\n // (parameter named `sig`, not `signature`: the extractor's generated\n // code would otherwise shadow the `signature::` crate namespace)\n let sig = InternalSignature::try_from(sig)?;\n let expected_R = recompute_r_sha512(key, &sig, message);\n // AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes\n // through machinery the extractor cannot interpret). Semantics identical\n // to `expected_R == signature.R`.\n let e = expected_R.as_bytes();\n let r = sig.R.as_bytes();\n let mut equal = true;\n let mut i = 0;\n while i < 32 {\n if e[i] != r[i] {\n equal = false;\n }\n i += 1;\n }\n if equal {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n}\n"},{"id":1,"name":{"Local":"ed25519-dalek/src/lib.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! A Rust implementation of ed25519 key generation, signing, and verification.\n//!\n//! # Example\n//!\n//! Creating an ed25519 signature on a message is simple.\n//!\n//! First, we need to generate a `SigningKey`, which includes both public and\n//! secret halves of an asymmetric key. To do so, we need a cryptographically\n//! secure pseudorandom number generator (CSPRNG). For this example, we'll use\n//! the operating system's builtin PRNG:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! // $ cargo add ed25519_dalek --features rand_core\n//! use rand::rngs::OsRng;\n//! use ed25519_dalek::SigningKey;\n//! use ed25519_dalek::Signature;\n//!\n//! let mut csprng = OsRng;\n//! let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # }\n//! ```\n//!\n//! We can now use this `signing_key` to sign a message:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::SigningKey;\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! use ed25519_dalek::{Signature, Signer};\n//! let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! let signature: Signature = signing_key.sign(message);\n//! # }\n//! ```\n//!\n//! As well as to verify that this is, indeed, a valid signature on\n//! that `message`:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! use ed25519_dalek::Verifier;\n//! assert!(signing_key.verify(message, &signature).is_ok());\n//! # }\n//! ```\n//!\n//! Anyone else, given the `public` half of the `signing_key` can also easily\n//! verify this signature:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::SigningKey;\n//! # use ed25519_dalek::Signature;\n//! # use ed25519_dalek::Signer;\n//! use ed25519_dalek::{VerifyingKey, Verifier};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//!\n//! let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! assert!(verifying_key.verify(message, &signature).is_ok());\n//! # }\n//! ```\n//!\n//! ## Serialisation\n//!\n//! `VerifyingKey`s, `SecretKey`s, `SigningKey`s, and `Signature`s can be serialised\n//! into byte-arrays by calling `.to_bytes()`. It's perfectly acceptable and\n//! safe to transfer and/or store those bytes. (Of course, never transfer your\n//! secret key to anyone else, since they will only need the public key to\n//! verify your signatures!)\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, VerifyingKey};\n//! use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//!\n//! let verifying_key_bytes: [u8; PUBLIC_KEY_LENGTH] = signing_key.verifying_key().to_bytes();\n//! let secret_key_bytes: [u8; SECRET_KEY_LENGTH] = signing_key.to_bytes();\n//! let signing_key_bytes: [u8; KEYPAIR_LENGTH] = signing_key.to_keypair_bytes();\n//! let signature_bytes: [u8; SIGNATURE_LENGTH] = signature.to_bytes();\n//! # }\n//! ```\n//!\n//! And similarly, decoded from bytes with `::from_bytes()`:\n//!\n#![cfg_attr(feature = \"rand_core\", doc = \"```\")]\n#![cfg_attr(not(feature = \"rand_core\"), doc = \"```ignore\")]\n//! # use core::convert::{TryFrom, TryInto};\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, VerifyingKey, SecretKey, SignatureError};\n//! # use ed25519_dalek::{PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH, KEYPAIR_LENGTH, SIGNATURE_LENGTH};\n//! # fn do_test() -> Result<(SigningKey, VerifyingKey, Signature), SignatureError> {\n//! # let mut csprng = OsRng;\n//! # let signing_key_orig: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature_orig: Signature = signing_key_orig.sign(message);\n//! # let verifying_key_bytes: [u8; PUBLIC_KEY_LENGTH] = signing_key_orig.verifying_key().to_bytes();\n//! # let signing_key_bytes: [u8; SECRET_KEY_LENGTH] = signing_key_orig.to_bytes();\n//! # let signature_bytes: [u8; SIGNATURE_LENGTH] = signature_orig.to_bytes();\n//! #\n//! let verifying_key: VerifyingKey = VerifyingKey::from_bytes(&verifying_key_bytes)?;\n//! let signing_key: SigningKey = SigningKey::from_bytes(&signing_key_bytes);\n//! let signature: Signature = Signature::try_from(&signature_bytes[..])?;\n//! #\n//! # Ok((signing_key, verifying_key, signature))\n//! # }\n//! # fn main() {\n//! # do_test();\n//! # }\n//! ```\n//!\n//! ### PKCS#8 Key Encoding\n//!\n//! PKCS#8 is a private key format with support for multiple algorithms.\n//! It can be encoded as binary (DER) or text (PEM).\n//!\n//! You can recognize PEM-encoded PKCS#8 keys by the following:\n//!\n//! ```text\n//! -----BEGIN PRIVATE KEY-----\n//! ```\n//!\n//! To use PKCS#8, you need to enable the `pkcs8` crate feature.\n//!\n//! The following traits can be used to decode/encode [`SigningKey`] and\n//! [`VerifyingKey`] as PKCS#8. Note that [`pkcs8`] is re-exported from the\n//! toplevel of the crate:\n//!\n//! - [`pkcs8::DecodePrivateKey`]: decode private keys from PKCS#8\n//! - [`pkcs8::EncodePrivateKey`]: encode private keys to PKCS#8\n//! - [`pkcs8::DecodePublicKey`]: decode public keys from PKCS#8\n//! - [`pkcs8::EncodePublicKey`]: encode public keys to PKCS#8\n//!\n//! #### Example\n//!\n//! NOTE: this requires the `pem` crate feature.\n//!\n#![cfg_attr(feature = \"pem\", doc = \"```\")]\n#![cfg_attr(not(feature = \"pem\"), doc = \"```ignore\")]\n//! use ed25519_dalek::{VerifyingKey, pkcs8::DecodePublicKey};\n//!\n//! let pem = \"-----BEGIN PUBLIC KEY-----\n//! MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=\n//! -----END PUBLIC KEY-----\";\n//!\n//! let verifying_key = VerifyingKey::from_public_key_pem(pem)\n//! .expect(\"invalid public key PEM\");\n//! ```\n//!\n//! ### Using Serde\n//!\n//! If you prefer the bytes to be wrapped in another serialisation format, all\n//! types additionally come with built-in [serde](https://serde.rs) support by\n//! building `ed25519-dalek` via:\n//!\n//! ```bash\n//! $ cargo build --features=\"serde\"\n//! ```\n//!\n//! They can be then serialised into any of the wire formats which serde supports.\n//! For example, using [bincode](https://github.com/TyOverby/bincode):\n//!\n#![cfg_attr(all(feature = \"rand_core\", feature = \"serde\"), doc = \"```\")]\n#![cfg_attr(not(all(feature = \"rand_core\", feature = \"serde\")), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! use bincode::serialize;\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! # let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! # let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! # let verified: bool = verifying_key.verify(message, &signature).is_ok();\n//!\n//! let encoded_verifying_key: Vec<u8> = serialize(&verifying_key).unwrap();\n//! let encoded_signature: Vec<u8> = serialize(&signature).unwrap();\n//! # }\n//! ```\n//!\n//! After sending the `encoded_verifying_key` and `encoded_signature`, the\n//! recipient may deserialise them and verify:\n//!\n#![cfg_attr(all(feature = \"rand_core\", feature = \"serde\"), doc = \"```\")]\n#![cfg_attr(not(all(feature = \"rand_core\", feature = \"serde\")), doc = \"```ignore\")]\n//! # fn main() {\n//! # use rand::rngs::OsRng;\n//! # use ed25519_dalek::{SigningKey, Signature, Signer, Verifier, VerifyingKey};\n//! # use bincode::serialize;\n//! use bincode::deserialize;\n//!\n//! # let mut csprng = OsRng;\n//! # let signing_key: SigningKey = SigningKey::generate(&mut csprng);\n//! let message: &[u8] = b\"This is a test of the tsunami alert system.\";\n//! # let signature: Signature = signing_key.sign(message);\n//! # let verifying_key: VerifyingKey = signing_key.verifying_key();\n//! # let verified: bool = verifying_key.verify(message, &signature).is_ok();\n//! # let encoded_verifying_key: Vec<u8> = serialize(&verifying_key).unwrap();\n//! # let encoded_signature: Vec<u8> = serialize(&signature).unwrap();\n//! let decoded_verifying_key: VerifyingKey = deserialize(&encoded_verifying_key).unwrap();\n//! let decoded_signature: Signature = deserialize(&encoded_signature).unwrap();\n//!\n//! # assert_eq!(verifying_key, decoded_verifying_key);\n//! # assert_eq!(signature, decoded_signature);\n//! #\n//! let verified: bool = decoded_verifying_key.verify(&message, &decoded_signature).is_ok();\n//!\n//! assert!(verified);\n//! # }\n//! ```\n\n#![no_std]\n#![warn(future_incompatible, rust_2018_idioms)]\n#![deny(missing_docs)] // refuse to compile if documentation is missing\n#![deny(clippy::unwrap_used)] // don't allow unwrap\n#![cfg_attr(not(test), forbid(unsafe_code))]\n#![cfg_attr(docsrs, feature(doc_auto_cfg, doc_cfg, doc_cfg_hide))]\n#![cfg_attr(docsrs, doc(cfg_hide(docsrs)))]\n\n#[cfg(feature = \"batch\")]\nextern crate alloc;\n\n#[cfg(any(feature = \"std\", test))]\n#[macro_use]\nextern crate std;\n\npub use ed25519;\n\n#[cfg(feature = \"batch\")]\nmod batch;\nmod constants;\n#[cfg(feature = \"digest\")]\nmod context;\nmod errors;\nmod signature;\nmod signing;\nmod verifying;\n\n#[cfg(feature = \"hazmat\")]\npub mod hazmat;\n#[cfg(not(feature = \"hazmat\"))]\nmod hazmat;\n\n#[cfg(feature = \"digest\")]\npub use curve25519_dalek::digest::Digest;\n#[cfg(feature = \"digest\")]\npub use sha2::Sha512;\n\n#[cfg(feature = \"batch\")]\npub use crate::batch::*;\npub use crate::constants::*;\n#[cfg(feature = \"digest\")]\npub use crate::context::Context;\npub use crate::errors::*;\npub use crate::signing::*;\npub use crate::verifying::*;\n\n// Re-export the `Signer` and `Verifier` traits from the `signature` crate\n#[cfg(feature = \"digest\")]\npub use ed25519::signature::{DigestSigner, DigestVerifier};\npub use ed25519::signature::{Signer, Verifier};\npub use ed25519::Signature;\n\n#[cfg(feature = \"pkcs8\")]\npub use ed25519::pkcs8;\n"},{"id":2,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/ed25519-2.2.3/src/lib.rs"},"crate_name":"ed25519","contents":null},{"id":3,"name":{"Local":"/rustc/library/core/src/result.rs"},"crate_name":"core","contents":null},{"id":4,"name":{"Local":"/rustc/library/core/src/lib.rs"},"crate_name":"core","contents":null},{"id":5,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-2.2.0/src/error.rs"},"crate_name":"signature","contents":null},{"id":6,"name":{"Local":"/cargo/registry/src/index.crates.io-1949cf8c6b5b557f/signature-2.2.0/src/lib.rs"},"crate_name":"signature","contents":null},{"id":7,"name":{"Local":"ed25519-dalek/src/signature.rs"},"crate_name":"ed25519_dalek","contents":"// -*- mode: rust; -*-\n//\n// This file is part of ed25519-dalek.\n// Copyright (c) 2017-2019 isis lovecruft\n// See LICENSE for licensing information.\n//\n// Authors:\n// - isis agora lovecruft <isis@patternsinthevoid.net>\n\n//! An ed25519 signature.\n\nuse core::fmt::Debug;\n\nuse curve25519_dalek::edwards::CompressedEdwardsY;\nuse curve25519_dalek::scalar::Scalar;\n\nuse crate::constants::*;\nuse crate::errors::*;\n\n/// An ed25519 signature.\n///\n/// # Note\n///\n/// These signatures, unlike the ed25519 signature reference implementation, are\n/// \"detached\"—that is, they do **not** include a copy of the message which has\n/// been signed.\n#[allow(non_snake_case)]\n#[derive(Copy, Eq, PartialEq)]\npub(crate) struct InternalSignature {\n /// `R` is an `EdwardsPoint`, formed by using an hash function with\n /// 512-bits output to produce the digest of:\n ///\n /// - the nonce half of the `ExpandedSecretKey`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in ℤ/lℤ. The scalar is then multiplied by the distinguished\n /// basepoint to produce `R`, and `EdwardsPoint`.\n pub(crate) R: CompressedEdwardsY,\n\n /// `s` is a `Scalar`, formed by using an hash function with 512-bits output\n /// to produce the digest of:\n ///\n /// - the `r` portion of this `Signature`,\n /// - the `PublicKey` which should be used to verify this `Signature`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in ℤ/lℤ.\n pub(crate) s: Scalar,\n}\n\nimpl Clone for InternalSignature {\n fn clone(&self) -> Self {\n *self\n }\n}\n\nimpl Debug for InternalSignature {\n fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {\n write!(f, \"Signature( R: {:?}, s: {:?} )\", &self.R, &self.s)\n }\n}\n\n\n/// AENEAS-COMPAT (formal verification): opaque constructor — building the\n/// (extraction-opaque) `CompressedEdwardsY` aggregate directly cannot be\n/// interpreted by the extractor. Semantics: the tuple constructor.\npub(crate) fn compressed_from_bytes(bytes: [u8; 32]) -> CompressedEdwardsY {\n CompressedEdwardsY(bytes)\n}\n\n/// Ensures that the scalar `s` of a signature is within the bounds [0, 2^253).\n///\n/// **Unsafe**: This version of `check_scalar` permits signature malleability. See README.\n#[cfg(feature = \"legacy_compatibility\")]\n#[inline(always)]\nfn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n // The highest 3 bits must not be set. No other checking for the\n // remaining 2^253 - 2^252 + 27742317777372353535851937790883648493\n // potential non-reduced scalars is performed.\n //\n // This is compatible with ed25519-donna and libsodium when\n // -DED25519_COMPAT is NOT specified.\n if bytes[31] & 224 != 0 {\n return Err(InternalError::ScalarFormat.into());\n }\n\n // You cannot do arithmetic with scalars construct with Scalar::from_bits. We only use this\n // scalar for EdwardsPoint::vartime_double_scalar_mul_basepoint, which is an accepted usecase.\n // The `from_bits` method is deprecated because it's unsafe. We know this.\n #[allow(deprecated)]\n Ok(Scalar::from_bits(bytes))\n}\n\n/// Ensures that the scalar `s` of a signature is within the bounds [0, ℓ)\n///\n/// AENEAS-COMPAT (formal verification): explicit little-endian comparison\n/// against ℓ followed by `from_bytes_mod_order` (the identity on canonical\n/// bytes) — value-level semantics identical to\n/// `Scalar::from_canonical_bytes(bytes).into()`; the subtle machinery's\n/// `black_box` internals defeat the extractor, and the verification path is\n/// variable-time throughout.\n#[cfg(not(feature = \"legacy_compatibility\"))]\n#[inline(always)]\nfn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n /// ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian.\n const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];\n // bytes < ℓ, most-significant byte first; the first differing byte decides.\n let mut lt = false;\n let mut decided = false;\n let mut i = 32;\n while i > 0 {\n let j = i - 1;\n if !decided {\n if bytes[j] < L_BYTES[j] {\n lt = true;\n decided = true;\n } else if bytes[j] > L_BYTES[j] {\n decided = true;\n }\n }\n i -= 1;\n }\n if lt {\n Ok(Scalar::from_bytes_mod_order(bytes))\n } else {\n Err(InternalError::ScalarFormat.into())\n }\n}\n\nimpl InternalSignature {\n /// Construct a `Signature` from a slice of bytes.\n ///\n /// # Scalar Malleability Checking\n ///\n /// As originally specified in the ed25519 paper (cf. the \"Malleability\"\n /// section of the README in this repo), no checks whatsoever were performed\n /// for signature malleability.\n ///\n /// Later, a semi-functional, hacky check was added to most libraries to\n /// \"ensure\" that the scalar portion, `s`, of the signature was reduced `mod\n /// \\ell`, the order of the basepoint:\n ///\n /// ```ignore\n /// if signature.s[31] & 224 != 0 {\n /// return Err();\n /// }\n /// ```\n ///\n /// This bit-twiddling ensures that the most significant three bits of the\n /// scalar are not set:\n ///\n /// ```python,ignore\n /// >>> 0b00010000 & 224\n /// 0\n /// >>> 0b00100000 & 224\n /// 32\n /// >>> 0b01000000 & 224\n /// 64\n /// >>> 0b10000000 & 224\n /// 128\n /// ```\n ///\n /// However, this check is hacky and insufficient to check that the scalar is\n /// fully reduced `mod \\ell = 2^252 + 27742317777372353535851937790883648493` as\n /// it leaves us with a guanteed bound of 253 bits. This means that there are\n /// `2^253 - 2^252 + 2774231777737235353585193779088364849311` remaining scalars\n /// which could cause malleabilllity.\n ///\n /// RFC8032 [states](https://tools.ietf.org/html/rfc8032#section-5.1.7):\n ///\n /// > To verify a signature on a message M using public key A, [...]\n /// > first split the signature into two 32-octet halves. Decode the first\n /// > half as a point R, and the second half as an integer S, in the range\n /// > 0 <= s < L. Decode the public key A as point A'. If any of the\n /// > decodings fail (including S being out of range), the signature is\n /// > invalid.\n ///\n /// However, by the time this was standardised, most libraries in use were\n /// only checking the most significant three bits. (See also the\n /// documentation for [`crate::VerifyingKey::verify_strict`].)\n #[inline]\n #[allow(non_snake_case)]\n pub fn from_bytes(bytes: &[u8; SIGNATURE_LENGTH]) -> Result<InternalSignature, SignatureError> {\n // TODO: Use bytes.split_array_ref once 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::fmt;\nuse core::fmt::Display;\n\n#[cfg(feature = \"std\")]\nuse std::error::Error;\n\n/// Internal errors. Most application-level developers will likely not\n/// need to pay any attention to these.\n#[derive(Clone, Copy, Debug, Eq, PartialEq, Hash)]\npub(crate) enum InternalError {\n PointDecompression,\n ScalarFormat,\n /// An error in the length of bytes handed to a constructor.\n ///\n /// To use this, pass a string specifying the `name` of the type which is\n /// returning the error, and the `length` in bytes which its constructor\n /// expects.\n BytesLength {\n name: &'static str,\n length: usize,\n },\n /// The verification equation wasn't satisfied\n Verify,\n /// Two arrays did not match in size, making the called signature\n /// verification method impossible.\n #[cfg(feature = \"batch\")]\n ArrayLength {\n name_a: &'static str,\n length_a: usize,\n name_b: &'static str,\n length_b: usize,\n name_c: &'static str,\n length_c: usize,\n },\n /// An ed25519ph signature can only take up to 255 octets of context.\n #[cfg(feature = \"digest\")]\n PrehashedContextLength,\n /// A mismatched (public, secret) key pair.\n MismatchedKeypair,\n}\n\nimpl Display for InternalError {\n fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {\n match *self {\n InternalError::PointDecompression => write!(f, \"Cannot decompress Edwards point\"),\n InternalError::ScalarFormat => write!(f, \"Cannot use scalar with high-bit set\"),\n InternalError::BytesLength { name: n, length: l } => {\n write!(f, \"{} must be {} bytes in length\", n, l)\n }\n InternalError::Verify => write!(f, \"Verification equation was not satisfied\"),\n #[cfg(feature = \"batch\")]\n InternalError::ArrayLength {\n name_a: na,\n length_a: la,\n name_b: nb,\n length_b: lb,\n name_c: nc,\n length_c: lc,\n } => write!(\n f,\n \"Arrays must be the same length: {} has length {},\n {} has length {}, {} has length {}.\",\n na, la, nb, lb, nc, lc\n ),\n #[cfg(feature = \"digest\")]\n InternalError::PrehashedContextLength => write!(\n f,\n \"An ed25519ph signature can only take up to 255 octets of context\"\n ),\n InternalError::MismatchedKeypair => write!(f, \"Mismatched Keypair detected\"),\n }\n }\n}\n\n#[cfg(feature = \"std\")]\nimpl Error for InternalError {}\n\n/// Errors which may occur while processing signatures and keypairs.\n///\n/// This error may arise due to:\n///\n/// * Being given bytes with a length different to what was expected.\n///\n/// * A problem decompressing `r`, a curve point, in the `Signature`, or the\n/// curve point for a `PublicKey`.\n///\n/// * A problem with the format of `s`, a scalar, in the `Signature`. This\n/// is only raised if the high-bit of the scalar was set. (Scalars must\n/// only be constructed from 255-bit integers.)\n///\n/// * Failure of a signature to satisfy the verification equation.\npub type SignatureError = ed25519::signature::Error;\n\nimpl From<InternalError> for SignatureError {\n #[cfg(not(feature = \"std\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"std\")]\n fn from(err: InternalError) -> SignatureError {\n SignatureError::from_source(err)\n }\n}\n"},{"id":14,"name":{"Local":"curve25519-dalek/src/scalar.rs"},"crate_name":"curve25519_dalek","contents":null},{"id":15,"name":{"Local":"/rustc/library/core/src/ops/try_trait.rs"},"crate_name":"core","contents":null},{"id":16,"name":{"Local":"/rustc/library/core/src/ops/arith.rs"},"crate_name":"core","contents":null}],"item_names":[{"key":{"Fun":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["verify_sha512",0]}]},{"key":{"Fun":1},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["recompute_r_sha512",0]}]},{"key":{"Type":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["VerifyingKey",0]}]},{"key":{"Type":1},"value":[{"Ident":["ed25519",0]},{"Ident":["Signature",0]}]},{"key":{"Type":2},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Ident":["Result",0]}]},{"key":{"Type":3},"value":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Ident":["Error",0]}]},{"key":{"Type":4},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["InternalSignature",0]}]},{"key":{"Type":5},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["control_flow",0]},{"Ident":["ControlFlow",0]}]},{"key":{"Type":6},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Infallible",0]}]},{"key":{"Type":7},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["CompressedEdwardsY",0]}]},{"key":{"Type":8},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Ident":["InternalError",0]}]},{"key":{"TraitImpl":0},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}}]},{"key":{"Fun":2},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}},{"Ident":["try_from",0]}]},{"key":{"TraitImpl":1},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}}]},{"key":{"Fun":3},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["branch",0]}]},{"key":{"Fun":4},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[557,{"Adt":{"id":{"Adt":7},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["as_bytes",0]}]},{"key":{"TraitImpl":2},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}}]},{"key":{"Fun":5},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}]},{"key":{"TraitDecl":0},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]}]},{"key":{"TraitImpl":3},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}}]},{"key":{"TraitImpl":4},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}}]},{"key":{"Fun":6},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}},{"Ident":["into",0]}]},{"key":{"TraitImpl":5},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}}]},{"key":{"Type":9},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Ident":["Scalar",0]}]},{"key":{"Type":10},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}]},{"key":{"Fun":7},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_hash3",0]}]},{"key":{"Fun":8},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[748,{"Adt":{"id":{"Adt":9},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"TraitImpl":6},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}}]},{"key":{"Fun":9},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["neg",0]}]},{"key":{"Fun":10},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[772,{"Adt":{"id":{"Adt":10},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":11},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]}]},{"key":{"Fun":12},"value":[{"Ident":["ed25519",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[347,{"Adt":{"id":{"Adt":1},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}]},{"key":{"Fun":13},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[413,{"Adt":{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":7}}]},{"key":{"Fun":14},"value":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":15},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]},{"Ident":["from",0]}]},{"key":{"Fun":16},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]}]},{"key":{"Fun":17},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]}]},{"key":{"Global":0},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":18},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]},{"Ident":["try_from",0]}]},{"key":{"Fun":19},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["compressed_from_bytes",0]}]},{"key":{"Fun":20},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}]},{"key":{"Fun":21},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}]},{"key":{"Fun":22},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}]},{"key":{"Fun":23},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}]},{"key":{"Fun":24},"value":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]},{"Ident":["into",0]}]},{"key":{"Fun":25},"value":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"HashConsedValue":[379,{"Adt":{"id":{"Adt":3},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"kind":"InherentImplBlock"}}},{"Ident":["new",0]}]},{"key":{"Type":11},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["{vtable}",0]}]},{"key":{"Fun":26},"value":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["neg",0]}]},{"key":{"Global":1},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}]},{"key":{"Fun":27},"value":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}]},{"key":{"Fun":28},"value":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}]}],"assoc_item_names":[{"types":[],"methods":["from"],"consts":[]},{"types":["Error"],"methods":["try_from"],"consts":[]},{"types":["Output","Residual","Self_Clause1_TryType"],"methods":["from_output","branch"],"consts":[]},{"types":[],"methods":["from_residual"],"consts":[]},{"types":["TryType"],"methods":[],"consts":[]},{"types":[],"methods":["into"],"consts":[]},{"types":["Output"],"methods":["neg"],"consts":[]}],"short_names":[{"key":{"TraitImpl":0},"value":[{"Ident":["impl_TryFrom_for_InternalSignature",0]}]},{"key":{"Fun":2},"value":[{"Impl":{"Trait":0}},{"Ident":["try_from",0]}]},{"key":{"TraitImpl":1},"value":[{"Ident":["impl_Try_for_Result",0]}]},{"key":{"Fun":3},"value":[{"Impl":{"Trait":1}},{"Ident":["branch",0]}]},{"key":{"TraitImpl":2},"value":[{"Ident":["impl_FromResidual_Result_for_Result",0]}]},{"key":{"Fun":5},"value":[{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}]},{"key":{"TraitImpl":3},"value":[{"Ident":["impl_From_for_T",0]}]},{"key":{"TraitImpl":4},"value":[{"Ident":["impl_Into_for_T",0]}]},{"key":{"Fun":6},"value":[{"Impl":{"Trait":4}},{"Ident":["into",0]}]},{"key":{"TraitImpl":5},"value":[{"Ident":["impl_From_InternalError_for_Error",0]}]},{"key":{"TraitImpl":6},"value":[{"Ident":["impl_Neg_for_EdwardsPoint",0]}]},{"key":{"Fun":9},"value":[{"Impl":{"Trait":6}},{"Ident":["neg",0]}]},{"key":{"TraitImpl":7},"value":[{"Ident":["impl_Residual_for_Result_Infallible",0]}]},{"key":{"Fun":14},"value":[{"Impl":{"Trait":1}},{"Ident":["from_output",0]}]},{"key":{"Fun":16},"value":[{"Impl":{"Trait":3}},{"Ident":["from",0]}]},{"key":{"Fun":17},"value":[{"Impl":{"Trait":5}},{"Ident":["from",0]}]},{"key":{"Global":0},"value":[{"Impl":{"Trait":6}},{"Ident":["{vtable}",0]}]},{"key":{"Fun":0},"value":[{"Ident":["verify_sha512",0]}]},{"key":{"Fun":11},"value":[{"Ident":["compress",0]}]},{"key":{"TraitDecl":1},"value":[{"Ident":["TryFrom",0]}]},{"key":{"Fun":13},"value":[{"Ident":["from_bytes",0]}]},{"key":{"Type":6},"value":[{"Ident":["Infallible",0]}]},{"key":{"Fun":12},"value":[{"Ident":["to_bytes",0]}]},{"key":{"TraitDecl":5},"value":[{"Ident":["Into",0]}]},{"key":{"Type":3},"value":[{"Ident":["Error",0]}]},{"key":{"TraitDecl":4},"value":[{"Ident":["Residual",0]}]},{"key":{"Fun":7},"value":[{"Ident":["sha512_hash3",0]}]},{"key":{"Type":8},"value":[{"Ident":["InternalError",0]}]},{"key":{"TraitDecl":3},"value":[{"Ident":["FromResidual",0]}]},{"key":{"Fun":25},"value":[{"Ident":["new",0]}]},{"key":{"Fun":4},"value":[{"Ident":["as_bytes",0]}]},{"key":{"Type":7},"value":[{"Ident":["CompressedEdwardsY",0]}]},{"key":{"TraitDecl":0},"value":[{"Ident":["From",0]}]},{"key":{"Fun":1},"value":[{"Ident":["recompute_r_sha512",0]}]},{"key":{"Fun":19},"value":[{"Ident":["compressed_from_bytes",0]}]},{"key":{"TraitDecl":2},"value":[{"Ident":["Try",0]}]},{"key":{"Type":5},"value":[{"Ident":["ControlFlow",0]}]},{"key":{"Type":0},"value":[{"Ident":["VerifyingKey",0]}]},{"key":{"Fun":8},"value":[{"Ident":["from_bytes_mod_order_wide",0]}]},{"key":{"Type":10},"value":[{"Ident":["EdwardsPoint",0]}]},{"key":{"Type":2},"value":[{"Ident":["Result",0]}]},{"key":{"Fun":10},"value":[{"Ident":["vartime_double_scalar_mul_basepoint",0]}]},{"key":{"Fun":20},"value":[{"Ident":["check_scalar",0]}]},{"key":{"Type":1},"value":[{"Ident":["Signature",0]}]},{"key":{"Global":1},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Fun":28},"value":[{"Ident":["L_BYTES",0]}]},{"key":{"Type":4},"value":[{"Ident":["InternalSignature",0]}]},{"key":{"TraitDecl":6},"value":[{"Ident":["Neg",0]}]},{"key":{"Type":9},"value":[{"Ident":["Scalar",0]}]},{"key":{"Fun":27},"value":[{"Ident":["from_bytes_mod_order",0]}]}],"type_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["VerifyingKey",0]}],"span":{"data":{"file_id":0,"beg":{"line":58,"col":0},"end":{"line":64,"col":1}},"generated_from_span":null},"source_text":"pub struct VerifyingKey {\n /// Serialized compressed Edwards-y point.\n pub(crate) compressed: CompressedEdwardsY,\n\n /// Decompressed Edwards point used for curve arithmetic operations.\n pub(crate) point: EdwardsPoint,\n}","attr_info":{"attributes":[{"DocComment":" An ed25519 public key."},{"DocComment":""},{"DocComment":" # Note"},{"DocComment":""},{"DocComment":" The `Eq` and `Hash` impls here use the compressed Edwards y encoding, _not_ the algebraic"},{"DocComment":" representation. This means if this `VerifyingKey` is non-canonically encoded, it will be"},{"DocComment":" considered unequal to the other equivalent encoding, despite the two representing the same"},{"DocComment":" point. More encoding details can be found"},{"DocComment":" [here](https://hdevalence.ca/blog/2020-10-04-its-25519am)."},{"DocComment":" If you want to make sure that signatures produced with respect to those sorts of public keys"},{"DocComment":" are rejected, use [`VerifyingKey::verify_strict`]."}],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Struct":[{"span":{"data":{"file_id":0,"beg":{"line":60,"col":4},"end":{"line":60,"col":45}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Serialized compressed Edwards-y point."}],"inline":null,"rename":null,"public":false},"name":"compressed","ty":{"Deduplicated":557}},{"span":{"data":{"file_id":0,"beg":{"line":63,"col":4},"end":{"line":63,"col":34}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Decompressed Edwards point used for curve arithmetic operations."}],"inline":null,"rename":null,"public":false},"name":"point","ty":{"Deduplicated":772}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":192,"align":8,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519",0]},{"Ident":["Signature",0]}],"span":{"data":{"file_id":2,"beg":{"line":303,"col":0},"end":{"line":303,"col":20}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Ed25519 signature."},{"DocComment":""},{"DocComment":" This type represents a container for the byte serialization of an Ed25519"},{"DocComment":" signature, and does not necessarily represent well-formed field or curve"},{"DocComment":" elements."},{"DocComment":""},{"DocComment":" Signature verification libraries are expected to reject invalid field"},{"DocComment":" elements at the time a signature is verified."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":64,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"C","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Ident":["Result",0]}],"span":{"data":{"file_id":3,"beg":{"line":557,"col":0},"end":{"line":557,"col":21}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" `Result` is a type that represents either success ([`Ok`]) or failure ([`Err`])."},{"DocComment":""},{"DocComment":" See the [module documentation](self) for details."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Result"},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":3,"beg":{"line":561,"col":4},"end":{"line":561,"col":6}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Contains the success value"}],"inline":null,"rename":null,"public":true},"name":"Ok","fields":[{"span":{"data":{"file_id":3,"beg":{"line":561,"col":53},"end":{"line":561,"col":54}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"HashConsedValue":[1394,{"TypeVar":{"Free":0}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":3,"beg":{"line":566,"col":4},"end":{"line":566,"col":7}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Contains the error value"}],"inline":null,"rename":null,"public":true},"name":"Err","fields":[{"span":{"data":{"file_id":3,"beg":{"line":566,"col":54},"end":{"line":566,"col":55}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"HashConsedValue":[1395,{"TypeVar":{"Free":1}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}}]},"layout":[],"ptr_metadata":"None"},{"def_id":3,"item_meta":{"name":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Ident":["Error",0]}],"span":{"data":{"file_id":5,"beg":{"line":26,"col":0},"end":{"line":26,"col":16}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Signature errors."},{"DocComment":""},{"DocComment":" This type is deliberately opaque as to avoid sidechannel leakage which"},{"DocComment":" could potentially be used recover signing private keys or forge signatures"},{"DocComment":" (e.g. [BB'06])."},{"DocComment":""},{"DocComment":" When the `std` feature is enabled, it impls [`std::error::Error`] and"},{"DocComment":" supports an optional [`std::error::Error::source`], which can be used by"},{"DocComment":" things like remote signers (e.g. HSM, KMS) to report I/O or auth errors."},{"DocComment":""},{"DocComment":" [BB'06]: https://en.wikipedia.org/wiki/Daniel_Bleichenbacher"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":0,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":4,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["InternalSignature",0]}],"span":{"data":{"file_id":7,"beg":{"line":29,"col":0},"end":{"line":51,"col":1}},"generated_from_span":null},"source_text":"pub(crate) struct InternalSignature {\n /// `R` is an `EdwardsPoint`, formed by using an hash function with\n /// 512-bits output to produce the digest of:\n ///\n /// - the nonce half of the `ExpandedSecretKey`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in ℤ/lℤ. The scalar is then multiplied by the distinguished\n /// basepoint to produce `R`, and `EdwardsPoint`.\n pub(crate) R: CompressedEdwardsY,\n\n /// `s` is a `Scalar`, formed by using an hash function with 512-bits output\n /// to produce the digest of:\n ///\n /// - the `r` portion of this `Signature`,\n /// - the `PublicKey` which should be used to verify this `Signature`, and\n /// - the message to be signed.\n ///\n /// This digest is then interpreted as a `Scalar` and reduced into an\n /// element in ℤ/lℤ.\n pub(crate) s: Scalar,\n}","attr_info":{"attributes":[{"DocComment":" An ed25519 signature."},{"DocComment":""},{"DocComment":" # Note"},{"DocComment":""},{"DocComment":" These signatures, unlike the ed25519 signature reference implementation, are"},{"DocComment":" \"detached\"—that is, they do **not** include a copy of the message which has"},{"DocComment":" been signed."},{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Struct":[{"span":{"data":{"file_id":7,"beg":{"line":39,"col":4},"end":{"line":39,"col":36}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" `R` is an `EdwardsPoint`, formed by using an hash function with"},{"DocComment":" 512-bits output to produce the digest of:"},{"DocComment":""},{"DocComment":" - the nonce half of the `ExpandedSecretKey`, and"},{"DocComment":" - the message to be signed."},{"DocComment":""},{"DocComment":" This digest is then interpreted as a `Scalar` and reduced into an"},{"DocComment":" element in ℤ/lℤ. The scalar is then multiplied by the distinguished"},{"DocComment":" basepoint to produce `R`, and `EdwardsPoint`."}],"inline":null,"rename":null,"public":false},"name":"R","ty":{"Deduplicated":557}},{"span":{"data":{"file_id":7,"beg":{"line":50,"col":4},"end":{"line":50,"col":24}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" `s` is a `Scalar`, formed by using an hash function with 512-bits output"},{"DocComment":" to produce the digest of:"},{"DocComment":""},{"DocComment":" - the `r` portion of this `Signature`,"},{"DocComment":" - the `PublicKey` which should be used to verify this `Signature`, and"},{"DocComment":" - the message to be signed."},{"DocComment":""},{"DocComment":" This digest is then interpreted as a `Scalar` and reduced into an"},{"DocComment":" element in ℤ/lℤ."}],"inline":null,"rename":null,"public":false},"name":"s","ty":{"Deduplicated":748}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":64,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,32],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["control_flow",0]},{"Ident":["ControlFlow",0]}],"span":{"data":{"file_id":8,"beg":{"line":89,"col":0},"end":{"line":89,"col":31}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to tell an operation whether it should exit early or go on as usual."},{"DocComment":""},{"DocComment":" This is used when exposing things (like graph traversals or visitors) where"},{"DocComment":" you want the user to be able to choose whether to exit early."},{"DocComment":" Having the enum makes it clearer -- no more wondering \"wait, what did `false`"},{"DocComment":" mean again?\" -- and allows including a value."},{"DocComment":""},{"DocComment":" Similar to [`Option`] and [`Result`], this enum can be used with the `?` operator"},{"DocComment":" to return immediately if the [`Break`] variant is present or otherwise continue normally"},{"DocComment":" with the value inside the [`Continue`] variant."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" Early-exiting from [`Iterator::try_for_each`]:"},{"DocComment":" ```"},{"DocComment":" use std::ops::ControlFlow;"},{"DocComment":""},{"DocComment":" let r = (2..100).try_for_each(|x| {"},{"DocComment":" if 403 % x == 0 {"},{"DocComment":" return ControlFlow::Break(x)"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" });"},{"DocComment":" assert_eq!(r, ControlFlow::Break(13));"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" A basic tree traversal:"},{"DocComment":" ```"},{"DocComment":" use std::ops::ControlFlow;"},{"DocComment":""},{"DocComment":" pub struct TreeNode<T> {"},{"DocComment":" value: T,"},{"DocComment":" left: Option<Box<TreeNode<T>>>,"},{"DocComment":" right: Option<Box<TreeNode<T>>>,"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl<T> TreeNode<T> {"},{"DocComment":" pub fn traverse_inorder<B>(&self, f: &mut impl FnMut(&T) -> ControlFlow<B>) -> ControlFlow<B> {"},{"DocComment":" if let Some(left) = &self.left {"},{"DocComment":" left.traverse_inorder(f)?;"},{"DocComment":" }"},{"DocComment":" f(&self.value)?;"},{"DocComment":" if let Some(right) = &self.right {"},{"DocComment":" right.traverse_inorder(f)?;"},{"DocComment":" }"},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" }"},{"DocComment":" fn leaf(value: T) -> Option<Box<TreeNode<T>>> {"},{"DocComment":" Some(Box::new(Self { value, left: None, right: None }))"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" let node = TreeNode {"},{"DocComment":" value: 0,"},{"DocComment":" left: TreeNode::leaf(1),"},{"DocComment":" right: Some(Box::new(TreeNode {"},{"DocComment":" value: -1,"},{"DocComment":" left: TreeNode::leaf(5),"},{"DocComment":" right: TreeNode::leaf(2),"},{"DocComment":" }))"},{"DocComment":" };"},{"DocComment":" let mut sum = 0;"},{"DocComment":""},{"DocComment":" let res = node.traverse_inorder(&mut |val| {"},{"DocComment":" if *val < 0 {"},{"DocComment":" ControlFlow::Break(*val)"},{"DocComment":" } else {"},{"DocComment":" sum += *val;"},{"DocComment":" ControlFlow::Continue(())"},{"DocComment":" }"},{"DocComment":" });"},{"DocComment":" assert_eq!(res, ControlFlow::Break(-1));"},{"DocComment":" assert_eq!(sum, 6);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`Break`]: ControlFlow::Break"},{"DocComment":" [`Continue`]: ControlFlow::Continue"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"ControlFlow"},"generics":{"regions":[],"types":[{"index":0,"name":"B"},{"index":1,"name":"C"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":8,"beg":{"line":93,"col":4},"end":{"line":93,"col":12}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Move on to the next phase of the operation as normal."}],"inline":null,"rename":null,"public":true},"name":"Continue","fields":[{"span":{"data":{"file_id":8,"beg":{"line":93,"col":13},"end":{"line":93,"col":14}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"Deduplicated":1395}}],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":8,"beg":{"line":97,"col":4},"end":{"line":97,"col":9}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" Exit the operation without running subsequent phases."}],"inline":null,"rename":null,"public":true},"name":"Break","fields":[{"span":{"data":{"file_id":8,"beg":{"line":97,"col":10},"end":{"line":97,"col":11}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"name":null,"ty":{"Deduplicated":1394}}],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}}]},"layout":[],"ptr_metadata":"None"},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Infallible",0]}],"span":{"data":{"file_id":10,"beg":{"line":930,"col":0},"end":{"line":930,"col":19}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The error type for errors that can never happen."},{"DocComment":""},{"DocComment":" Since this enum has no variant, a value of this type can never actually exist."},{"DocComment":" This can be useful for generic APIs that use [`Result`] and parameterize the error type,"},{"DocComment":" to indicate that the result is always [`Ok`]."},{"DocComment":""},{"DocComment":" For example, the [`TryFrom`] trait (conversion that returns a [`Result`])"},{"DocComment":" has a blanket implementation for all types where a reverse [`Into`] implementation exists."},{"DocComment":""},{"DocComment":" ```ignore (illustrates std code, duplicating the impl in a doctest would be an error)"},{"DocComment":" impl<T, U> TryFrom<U> for T where U: Into<T> {"},{"DocComment":" type Error = Infallible;"},{"DocComment":""},{"DocComment":" fn try_from(value: U) -> Result<Self, Infallible> {"},{"DocComment":" Ok(U::into(value)) // Never returns `Err`"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" # Future compatibility"},{"DocComment":""},{"DocComment":" This enum has the same role as [the `!` “never” type][never],"},{"DocComment":" which is unstable in this version of Rust."},{"DocComment":" When `!` is stabilized, we plan to make `Infallible` a type alias to it:"},{"DocComment":""},{"DocComment":" ```ignore (illustrates future std change)"},{"DocComment":" pub type Infallible = !;"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" … and eventually deprecate `Infallible`."},{"DocComment":""},{"DocComment":" However there is one case where `!` syntax can be used"},{"DocComment":" before `!` is stabilized as a full-fledged type: in the position of a 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":164,"col":0},"end":{"line":164,"col":29}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" In \"Edwards y\" / \"Ed25519\" format, the curve point \\\\((x,y)\\\\) is"},{"DocComment":" determined by the \\\\(y\\\\)-coordinate and the sign of \\\\(x\\\\)."},{"DocComment":""},{"DocComment":" The first 255 bits of a `CompressedEdwardsY` represent the"},{"DocComment":" \\\\(y\\\\)-coordinate. The high bit of the 32nd byte gives the sign of \\\\(x\\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":8,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Ident":["InternalError",0]}],"span":{"data":{"file_id":13,"beg":{"line":25,"col":0},"end":{"line":55,"col":1}},"generated_from_span":null},"source_text":"pub(crate) enum InternalError {\n PointDecompression,\n ScalarFormat,\n /// An error in the length of bytes handed to a constructor.\n ///\n /// To use this, pass a string specifying the `name` of the type which is\n /// returning the error, and the `length` in bytes which its constructor\n /// expects.\n BytesLength {\n name: &'static str,\n length: usize,\n },\n /// The verification equation wasn't satisfied\n Verify,\n /// Two arrays did not match in size, making the called signature\n /// verification method impossible.\n #[cfg(feature = \"batch\")]\n ArrayLength {\n name_a: &'static str,\n length_a: usize,\n name_b: &'static str,\n length_b: usize,\n name_c: &'static str,\n length_c: usize,\n },\n /// An ed25519ph signature can only take up to 255 octets of context.\n #[cfg(feature = \"digest\")]\n PrehashedContextLength,\n /// A mismatched (public, secret) key pair.\n MismatchedKeypair,\n}","attr_info":{"attributes":[{"DocComment":" Internal errors. Most application-level developers will likely not"},{"DocComment":" need to pay any attention to these."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":{"Enum":[{"id":0,"span":{"data":{"file_id":13,"beg":{"line":26,"col":4},"end":{"line":26,"col":22}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"PointDecompression","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","0"]}}},{"id":1,"span":{"data":{"file_id":13,"beg":{"line":27,"col":4},"end":{"line":27,"col":16}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"ScalarFormat","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","1"]}}},{"id":2,"span":{"data":{"file_id":13,"beg":{"line":33,"col":4},"end":{"line":33,"col":15}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" An error in the length of bytes handed to a constructor."},{"DocComment":""},{"DocComment":" To use this, pass a string specifying the `name` of the type which is"},{"DocComment":" returning the error, and the `length` in bytes which its constructor"},{"DocComment":" expects."}],"inline":null,"rename":null,"public":false},"name":"BytesLength","fields":[{"span":{"data":{"file_id":13,"beg":{"line":34,"col":8},"end":{"line":34,"col":26}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"name","ty":{"HashConsedValue":[1397,{"Ref":["Static",{"HashConsedValue":[1396,{"Adt":{"id":{"Builtin":"Str"},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]}},{"span":{"data":{"file_id":13,"beg":{"line":35,"col":8},"end":{"line":35,"col":21}},"generated_from_span":null},"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"name":"length","ty":{"HashConsedValue":[565,{"Literal":{"UInt":"Usize"}}]}}],"discriminant":{"Scalar":{"Signed":["Isize","2"]}}},{"id":3,"span":{"data":{"file_id":13,"beg":{"line":38,"col":4},"end":{"line":38,"col":10}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" The verification equation wasn't satisfied"}],"inline":null,"rename":null,"public":false},"name":"Verify","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","3"]}}},{"id":4,"span":{"data":{"file_id":13,"beg":{"line":54,"col":4},"end":{"line":54,"col":21}},"generated_from_span":null},"attr_info":{"attributes":[{"DocComment":" A mismatched (public, secret) key pair."}],"inline":null,"rename":null,"public":false},"name":"MismatchedKeypair","fields":[],"discriminant":{"Scalar":{"Signed":["Isize","4"]}}}]},"layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":8,"discriminator":{"Branch":{"offset":0,"int_ty":{"Unsigned":"U64"},"children":[[{"start":{"Unsigned":["U64","0"]},"end":{"Unsigned":["U64","0"]}},{"Known":0}],[{"start":{"Unsigned":["U64","1"]},"end":{"Unsigned":["U64","1"]}},{"Known":1}],[{"start":{"Unsigned":["U64","2"]},"end":{"Unsigned":["U64","2"]}},{"Known":2}],[{"start":{"Unsigned":["U64","3"]},"end":{"Unsigned":["U64","3"]}},{"Known":3}],[{"start":{"Unsigned":["U64","4"]},"end":{"Unsigned":["U64","4"]}},{"Known":4}]],"fallback":"Invalid"}},"uninhabited":false,"variant_layouts":[{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","0"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","1"]}]]},{"field_offsets":[16,8],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","2"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","3"]}]]},{"field_offsets":[],"uninhabited":false,"tagger":[[0,{"Unsigned":["U64","4"]}]]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":9,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Ident":["Scalar",0]}],"span":{"data":{"file_id":14,"beg":{"line":202,"col":0},"end":{"line":202,"col":17}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The `Scalar` struct holds an element of \\\\(\\mathbb Z / \\ell\\mathbb Z \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":32,"align":1,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},{"def_id":10,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Ident":["EdwardsPoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":376,"col":0},"end":{"line":376,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" An `EdwardsPoint` represents a point on the Edwards form of Curve25519."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"src":"TopLevel","kind":"Opaque","layout":[{"key":"x86_64-unknown-linux-gnu","value":{"size":160,"align":8,"discriminator":{"Known":0},"uninhabited":false,"variant_layouts":[{"field_offsets":[0,40,80,120],"uninhabited":false,"tagger":[]}],"repr":{"repr_algo":"Rust","align_modif":null,"transparent":false,"explicit_discr_type":false}}}],"ptr_metadata":"None"},null],"fun_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["verify_sha512",0]}],"span":{"data":{"file_id":0,"beg":{"line":733,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn verify_sha512(\n key: &VerifyingKey,\n message: &[u8],\n sig: &ed25519::Signature,\n) -> Result<(), SignatureError> {\n // (parameter named `sig`, not `signature`: the extractor's generated\n // code would otherwise shadow the `signature::` crate namespace)\n let sig = InternalSignature::try_from(sig)?;\n let expected_R = recompute_r_sha512(key, &sig, message);\n // AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes\n // through machinery the extractor cannot interpret). Semantics identical\n // to `expected_R == signature.R`.\n let e = expected_R.as_bytes();\n let r = sig.R.as_bytes();\n let mut equal = true;\n let mut i = 0;\n while i < 32 {\n if e[i] != r[i] {\n equal = false;\n }\n i += 1;\n }\n if equal {\n Ok(())\n } else {\n Err(InternalError::Verify.into())\n }\n}","attr_info":{"attributes":[{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1421,{"Ref":[{"Var":{"Free":0}},{"HashConsedValue":[334,{"Adt":{"id":{"Adt":0},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},"Shared"]}]},{"HashConsedValue":[1422,{"Ref":[{"Var":{"Free":1}},{"HashConsedValue":[337,{"Slice":{"HashConsedValue":[336,{"Literal":{"UInt":"U8"}}]}}]},"Shared"]}]},{"HashConsedValue":[1423,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":347},"Shared"]}]}],"output":{"HashConsedValue":[380,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[372,{"Adt":{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":733,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"bound_body_regions":29,"locals":{"arg_count":3,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":0,"beg":{"line":737,"col":5},"end":{"line":737,"col":31}},"generated_from_span":null},"ty":{"Deduplicated":380}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":734,"col":4},"end":{"line":734,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[383,{"Ref":[{"Body":1},{"Deduplicated":334},"Shared"]}]}},{"index":2,"name":"message","span":{"data":{"file_id":0,"beg":{"line":735,"col":4},"end":{"line":735,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[386,{"Ref":[{"Body":3},{"Deduplicated":337},"Shared"]}]}},{"index":3,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":736,"col":4},"end":{"line":736,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[389,{"Ref":[{"Body":5},{"Deduplicated":347},"Shared"]}]}},{"index":4,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"HashConsedValue":[521,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[520,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"HashConsedValue":[519,{"Adt":{"id":{"Adt":6},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":413}],"const_generics":[],"trait_refs":[]}}}]}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"ty":{"HashConsedValue":[524,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"ty":{"HashConsedValue":[525,{"Ref":[{"Body":6},{"Deduplicated":347},"Shared"]}]}},{"index":8,"name":"residual","span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":10,"name":"val","span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":11,"name":"expected_R","span":{"data":{"file_id":0,"beg":{"line":741,"col":8},"end":{"line":741,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"ty":{"HashConsedValue":[558,{"Ref":[{"Body":7},{"Deduplicated":334},"Shared"]}]}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[561,{"Ref":[{"Body":9},{"Deduplicated":413},"Shared"]}]}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"ty":{"HashConsedValue":[562,{"Ref":[{"Body":10},{"Deduplicated":413},"Shared"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"ty":{"HashConsedValue":[563,{"Ref":[{"Body":11},{"Deduplicated":337},"Shared"]}]}},{"index":16,"name":"e","span":{"data":{"file_id":0,"beg":{"line":745,"col":8},"end":{"line":745,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[568,{"Ref":[{"Body":13},{"HashConsedValue":[566,{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}]}]},"Shared"]}]}},{"index":17,"name":null,"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"ty":{"HashConsedValue":[571,{"Ref":[{"Body":15},{"Deduplicated":557},"Shared"]}]}},{"index":18,"name":"r","span":{"data":{"file_id":0,"beg":{"line":746,"col":8},"end":{"line":746,"col":9}},"generated_from_span":null},"ty":{"HashConsedValue":[572,{"Ref":[{"Body":16},{"Deduplicated":566},"Shared"]}]}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[573,{"Ref":[{"Body":17},{"Deduplicated":557},"Shared"]}]}},{"index":20,"name":"equal","span":{"data":{"file_id":0,"beg":{"line":747,"col":8},"end":{"line":747,"col":17}},"generated_from_span":null},"ty":{"HashConsedValue":[575,{"Literal":"Bool"}]}},{"index":21,"name":"i","span":{"data":{"file_id":0,"beg":{"line":748,"col":8},"end":{"line":748,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":23,"name":null,"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":28,"name":null,"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":372}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[611,{"Adt":{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}}]}},{"index":34,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1212,{"Ref":["Erased",{"Deduplicated":566},"Shared"]}]}},{"index":35,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1211,{"Ref":["Erased",{"Deduplicated":336},"Shared"]}]}},{"index":36,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":37,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":760,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"id":4,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":8},"end":{"line":740,"col":11}},"generated_from_span":null},"id":5,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":6,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"id":7,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"id":8,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":42},"end":{"line":740,"col":45}},"generated_from_span":null},"id":9,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":525}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":389}}},"Yes"]}]},"comments_before":["(parameter named `sig`, not `signature`: the extractor's generated","code would otherwise shadow the `signature::` crate namespace)"]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":46}},"generated_from_span":null},"id":10,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":2}},"generics":{"regions":[{"Body":18}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":7},"ty":{"Deduplicated":525}}}],"dest":{"kind":{"Local":6},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":45},"end":{"line":740,"col":46}},"generated_from_span":null},"id":11,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":12,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":524}}}],"dest":{"kind":{"Local":5},"ty":{"Deduplicated":521}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":13,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":760,"col":1}},"generated_from_span":null},"id":27,"kind":{"Switch":{"Match":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},[[[0],{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":760,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":16,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":17,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":18,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":19,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":20,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"HashConsedValue":[709,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":520}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":380}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":21,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":22,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":47},"end":{"line":740,"col":48}},"generated_from_span":null},"id":23,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":24,"kind":{"StorageDead":4},"comments_before":["AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes","through machinery the extractor cannot interpret). Semantics identical","to `expected_R == signature.R`."]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":1},"end":{"line":760,"col":1}},"generated_from_span":null},"id":25,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":28,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":29,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":413}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":5},"ty":{"Deduplicated":521}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":413}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":14},"end":{"line":740,"col":47}},"generated_from_span":null},"id":30,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":413}},{"Use":[{"Copy":{"kind":{"Local":10},"ty":{"Deduplicated":413}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":46},"end":{"line":740,"col":47}},"generated_from_span":null},"id":31,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":740,"col":47},"end":{"line":740,"col":48}},"generated_from_span":null},"id":32,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":8},"end":{"line":741,"col":18}},"generated_from_span":null},"id":33,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"id":34,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":40},"end":{"line":741,"col":43}},"generated_from_span":null},"id":35,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":558}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":36,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":37,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":38,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":562}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":413}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":45},"end":{"line":741,"col":49}},"generated_from_span":null},"id":39,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":561}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":562}},"Deref"]},"ty":{"Deduplicated":413}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"id":40,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":51},"end":{"line":741,"col":58}},"generated_from_span":null},"id":41,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":563}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":386}},"Deref"]},"ty":{"Deduplicated":337}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":386}},"PtrMetadata"]},"ty":{"Deduplicated":565}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":21},"end":{"line":741,"col":59}},"generated_from_span":null},"id":42,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":1}},"generics":{"regions":[{"Body":22},{"Body":23},{"Body":24}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":558}}},{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":561}}},{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":563}}}],"dest":{"kind":{"Local":11},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":43,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":44,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":58},"end":{"line":741,"col":59}},"generated_from_span":null},"id":45,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":741,"col":59},"end":{"line":741,"col":60}},"generated_from_span":null},"id":46,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":8},"end":{"line":745,"col":9}},"generated_from_span":null},"id":47,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"id":48,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":22}},"generated_from_span":null},"id":49,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":571}},{"Ref":{"place":{"kind":{"Local":11},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":12},"end":{"line":745,"col":33}},"generated_from_span":null},"id":50,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":26}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":571}}}],"dest":{"kind":{"Local":16},"ty":{"Deduplicated":568}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":745,"col":32},"end":{"line":745,"col":33}},"generated_from_span":null},"id":51,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":8},"end":{"line":746,"col":9}},"generated_from_span":null},"id":52,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"id":53,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":17}},"generated_from_span":null},"id":54,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":573}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":4},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":12},"end":{"line":746,"col":28}},"generated_from_span":null},"id":55,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":28}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":573}}}],"dest":{"kind":{"Local":18},"ty":{"Deduplicated":572}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":746,"col":27},"end":{"line":746,"col":28}},"generated_from_span":null},"id":56,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":747,"col":8},"end":{"line":747,"col":17}},"generated_from_span":null},"id":57,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":747,"col":20},"end":{"line":747,"col":24}},"generated_from_span":null},"id":58,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":748,"col":8},"end":{"line":748,"col":13}},"generated_from_span":null},"id":59,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":748,"col":16},"end":{"line":748,"col":17}},"generated_from_span":null},"id":60,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":106,"kind":{"Loop":{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":62,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"id":63,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":11}},"generated_from_span":null},"id":64,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":65,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":105,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":15},"end":{"line":749,"col":16}},"generated_from_span":null},"id":66,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"id":68,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":69,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"id":70,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":13},"end":{"line":750,"col":14}},"generated_from_span":null},"id":71,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":482,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":483,"kind":{"Assign":[{"kind":{"Local":34},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":16},"ty":{"Deduplicated":568}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":484,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":485,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":34},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":26},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":35},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":15}},"generated_from_span":null},"id":74,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":35},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":75,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"id":76,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":21},"end":{"line":750,"col":22}},"generated_from_span":null},"id":77,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":486,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":487,"kind":{"Assign":[{"kind":{"Local":36},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":18},"ty":{"Deduplicated":572}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":488,"kind":{"StorageLive":37},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":489,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":36},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":28},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":37},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":19},"end":{"line":750,"col":23}},"generated_from_span":null},"id":80,"kind":{"Assign":[{"kind":{"Local":27},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":37},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":11},"end":{"line":750,"col":23}},"generated_from_span":null},"id":81,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":575}},{"BinaryOp":["Ne",{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"id":95,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":82,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":83,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":84,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":85,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":751,"col":12},"end":{"line":751,"col":25}},"generated_from_span":null},"id":86,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":89,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":90,"kind":{"StorageDead":27},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":91,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":750,"col":22},"end":{"line":750,"col":23}},"generated_from_span":null},"id":92,"kind":{"StorageDead":25},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":752,"col":8},"end":{"line":752,"col":9}},"generated_from_span":null},"id":96,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"id":98,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":21},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":753,"col":8},"end":{"line":753,"col":14}},"generated_from_span":null},"id":100,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":754,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":102,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":103,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":749,"col":10},"end":{"line":749,"col":16}},"generated_from_span":null},"id":104,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":749,"col":15},"end":{"line":749,"col":16}},"generated_from_span":null},"id":107,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":754,"col":4},"end":{"line":754,"col":5}},"generated_from_span":null},"id":111,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"id":113,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":7},"end":{"line":755,"col":12}},"generated_from_span":null},"id":114,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":20},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"id":128,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"id":115,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":11},"end":{"line":756,"col":13}},"generated_from_span":null},"id":116,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":372}},{"Aggregate":[{"Adt":[{"id":"Tuple","generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":8},"end":{"line":756,"col":14}},"generated_from_span":null},"id":117,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":380}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":372}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":756,"col":13},"end":{"line":756,"col":14}},"generated_from_span":null},"id":118,"kind":{"StorageDead":31},"comments_before":[]}]},{"span":{"data":{"file_id":0,"beg":{"line":755,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"id":120,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"id":121,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":33}},"generated_from_span":null},"id":122,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":611}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},3,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":12},"end":{"line":758,"col":40}},"generated_from_span":null},"id":123,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":611},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"HashConsedValue":[732,{"kind":{"TraitImpl":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":611}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":39},"end":{"line":758,"col":40}},"generated_from_span":null},"id":124,"kind":{"StorageDead":33},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":8},"end":{"line":758,"col":41}},"generated_from_span":null},"id":125,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":380}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":372},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":379}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":758,"col":40},"end":{"line":758,"col":41}},"generated_from_span":null},"id":126,"kind":{"StorageDead":32},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":759,"col":4},"end":{"line":759,"col":5}},"generated_from_span":null},"id":129,"kind":{"StorageDead":30},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":130,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":131,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":132,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":133,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":134,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":0},"end":{"line":760,"col":1}},"generated_from_span":null},"id":135,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":760,"col":1},"end":{"line":760,"col":1}},"generated_from_span":null},"id":136,"kind":"Return","comments_before":[]}]},"comments":[[740,["(parameter named `sig`, not `signature`: the extractor's generated","code would otherwise shadow the `signature::` crate namespace)"]],[745,["AENEAS-COMPAT: explicit byte comparison (the derived PartialEq routes","through machinery the extractor cannot interpret). Semantics identical","to `expected_R == signature.R`."]]]}}},{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["recompute_r_sha512",0]}],"span":{"data":{"file_id":0,"beg":{"line":717,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn recompute_r_sha512(\n key: &VerifyingKey,\n sig: &InternalSignature,\n message: &[u8],\n) -> CompressedEdwardsY {\n let k = Scalar::from_bytes_mod_order_wide(&sha512_hash3(\n sig.R.as_bytes(),\n key.compressed.as_bytes(),\n message,\n ));\n\n let minus_A: EdwardsPoint = -key.point;\n EdwardsPoint::vartime_double_scalar_mul_basepoint(&k, &minus_A, &sig.s).compress()\n}","attr_info":{"attributes":[{"Unknown":{"path":"allow","args":"non_snake_case"}}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1421},{"HashConsedValue":[1424,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":413},"Shared"]}]},{"HashConsedValue":[1425,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":337},"Shared"]}]}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":0,"beg":{"line":717,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"bound_body_regions":51,"locals":{"arg_count":3,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":0,"beg":{"line":721,"col":5},"end":{"line":721,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":1,"name":"key","span":{"data":{"file_id":0,"beg":{"line":718,"col":4},"end":{"line":718,"col":7}},"generated_from_span":null},"ty":{"Deduplicated":383}},{"index":2,"name":"sig","span":{"data":{"file_id":0,"beg":{"line":719,"col":4},"end":{"line":719,"col":7}},"generated_from_span":null},"ty":{"HashConsedValue":[736,{"Ref":[{"Body":3},{"Deduplicated":413},"Shared"]}]}},{"index":3,"name":"message","span":{"data":{"file_id":0,"beg":{"line":720,"col":4},"end":{"line":720,"col":11}},"generated_from_span":null},"ty":{"HashConsedValue":[738,{"Ref":[{"Body":5},{"Deduplicated":337},"Shared"]}]}},{"index":4,"name":"k","span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":722,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":5,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"HashConsedValue":[754,{"Ref":[{"Body":7},{"HashConsedValue":[752,{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}]}]},"Shared"]}]}},{"index":6,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"HashConsedValue":[755,{"Ref":[{"Body":8},{"Deduplicated":752},"Shared"]}]}},{"index":7,"name":null,"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"ty":{"Deduplicated":752}},{"index":8,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[756,{"Ref":[{"Body":9},{"Deduplicated":337},"Shared"]}]}},{"index":9,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[758,{"Ref":[{"Body":11},{"Deduplicated":566},"Shared"]}]}},{"index":10,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"ty":{"HashConsedValue":[567,{"Ref":[{"Body":12},{"Deduplicated":566},"Shared"]}]}},{"index":11,"name":null,"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"ty":{"HashConsedValue":[570,{"Ref":[{"Body":14},{"Deduplicated":557},"Shared"]}]}},{"index":12,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[760,{"Ref":[{"Body":15},{"Deduplicated":337},"Shared"]}]}},{"index":13,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":572}},{"index":14,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"ty":{"HashConsedValue":[761,{"Ref":[{"Body":17},{"Deduplicated":566},"Shared"]}]}},{"index":15,"name":null,"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"ty":{"HashConsedValue":[762,{"Ref":[{"Body":18},{"Deduplicated":557},"Shared"]}]}},{"index":16,"name":null,"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"ty":{"HashConsedValue":[763,{"Ref":[{"Body":19},{"Deduplicated":337},"Shared"]}]}},{"index":17,"name":"minus_A","span":{"data":{"file_id":0,"beg":{"line":728,"col":8},"end":{"line":728,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":18,"name":null,"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":19,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"ty":{"HashConsedValue":[775,{"Ref":[{"Body":21},{"Deduplicated":772},"Shared"]}]}},{"index":20,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"ty":{"Deduplicated":772}},{"index":21,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[778,{"Ref":[{"Body":23},{"Deduplicated":748},"Shared"]}]}},{"index":22,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"ty":{"HashConsedValue":[779,{"Ref":[{"Body":24},{"Deduplicated":748},"Shared"]}]}},{"index":23,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[780,{"Ref":[{"Body":25},{"Deduplicated":772},"Shared"]}]}},{"index":24,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"ty":{"HashConsedValue":[781,{"Ref":[{"Body":26},{"Deduplicated":772},"Shared"]}]}},{"index":25,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[782,{"Ref":[{"Body":27},{"Deduplicated":748},"Shared"]}]}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"ty":{"HashConsedValue":[783,{"Ref":[{"Body":28},{"Deduplicated":748},"Shared"]}]}}]},"body":{"span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":730,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":0,"beg":{"line":722,"col":8},"end":{"line":722,"col":9}},"generated_from_span":null},"id":137,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":138,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":139,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"id":140,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":141,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":142,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":143,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"id":144,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":13}},"generated_from_span":null},"id":145,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":570}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":736}},"Deref"]},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":146,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":30}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":570}}}],"dest":{"kind":{"Local":10},"ty":{"Deduplicated":567}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":147,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":758}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":10},"ty":{"Deduplicated":567}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":8},"end":{"line":723,"col":24}},"generated_from_span":null},"id":148,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":758}}}],"dest":{"kind":{"Local":8},"ty":{"Deduplicated":756}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":23},"end":{"line":723,"col":24}},"generated_from_span":null},"id":149,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":723,"col":23},"end":{"line":723,"col":24}},"generated_from_span":null},"id":150,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":151,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":152,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":153,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"id":154,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":22}},"generated_from_span":null},"id":155,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":762}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},{"Field":[{"Adt":[0,null]},0]}]},"ty":{"Deduplicated":557}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":156,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":4}},"generics":{"regions":[{"Body":33}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":762}}}],"dest":{"kind":{"Local":14},"ty":{"Deduplicated":761}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":157,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":572}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":14},"ty":{"Deduplicated":761}},"Deref"]},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":8},"end":{"line":724,"col":33}},"generated_from_span":null},"id":158,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayToSliceShared"}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":572}}}],"dest":{"kind":{"Local":12},"ty":{"Deduplicated":760}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":32},"end":{"line":724,"col":33}},"generated_from_span":null},"id":159,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":724,"col":32},"end":{"line":724,"col":33}},"generated_from_span":null},"id":160,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"id":161,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":725,"col":8},"end":{"line":725,"col":15}},"generated_from_span":null},"id":162,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":763}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":738}},"Deref"]},"ty":{"Deduplicated":337}},"kind":"Shared","ptr_metadata":{"Copy":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":738}},"PtrMetadata"]},"ty":{"Deduplicated":565}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":47},"end":{"line":726,"col":5}},"generated_from_span":null},"id":163,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":7}},"generics":{"regions":[{"Body":38},{"Body":39},{"Body":40}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":8},"ty":{"Deduplicated":756}}},{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":760}}},{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":763}}}],"dest":{"kind":{"Local":7},"ty":{"Deduplicated":752}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":164,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":165,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":4},"end":{"line":726,"col":5}},"generated_from_span":null},"id":166,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":167,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":755}},{"Ref":{"place":{"kind":{"Local":7},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":46},"end":{"line":726,"col":5}},"generated_from_span":null},"id":168,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":754}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":6},"ty":{"Deduplicated":755}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":722,"col":12},"end":{"line":726,"col":6}},"generated_from_span":null},"id":169,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":8}},"generics":{"regions":[{"Body":42}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":754}}}],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":748}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":5},"end":{"line":726,"col":6}},"generated_from_span":null},"id":170,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":171,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":172,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":173,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":726,"col":6},"end":{"line":726,"col":7}},"generated_from_span":null},"id":174,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":8},"end":{"line":728,"col":15}},"generated_from_span":null},"id":175,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"id":176,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":33},"end":{"line":728,"col":42}},"generated_from_span":null},"id":177,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":772}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":383}},"Deref"]},"ty":{"Deduplicated":334}},{"Field":[{"Adt":[0,null]},1]}]},"ty":{"Deduplicated":772}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":32},"end":{"line":728,"col":42}},"generated_from_span":null},"id":178,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":9}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":772}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":772}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":728,"col":41},"end":{"line":728,"col":42}},"generated_from_span":null},"id":179,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":180,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":181,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":182,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":183,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":184,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":779}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":54},"end":{"line":729,"col":56}},"generated_from_span":null},"id":185,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":778}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":22},"ty":{"Deduplicated":779}},"Deref"]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":186,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":187,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":188,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":781}},{"Ref":{"place":{"kind":{"Local":17},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":58},"end":{"line":729,"col":66}},"generated_from_span":null},"id":189,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":780}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":24},"ty":{"Deduplicated":781}},"Deref"]},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":190,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":191,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":192,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":783}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Projection":[{"kind":{"Local":2},"ty":{"Deduplicated":736}},"Deref"]},"ty":{"Deduplicated":413}},{"Field":[{"Adt":[4,null]},1]}]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":68},"end":{"line":729,"col":74}},"generated_from_span":null},"id":193,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":782}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":26},"ty":{"Deduplicated":783}},"Deref"]},"ty":{"Deduplicated":748}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":194,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":10}},"generics":{"regions":[{"Body":46},{"Body":47},{"Body":48}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":21},"ty":{"Deduplicated":778}}},{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":780}}},{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":782}}}],"dest":{"kind":{"Local":20},"ty":{"Deduplicated":772}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":75}},"generated_from_span":null},"id":195,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":775}},{"Ref":{"place":{"kind":{"Local":20},"ty":{"Deduplicated":772}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":196,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":197,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":74},"end":{"line":729,"col":75}},"generated_from_span":null},"id":198,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":4},"end":{"line":729,"col":86}},"generated_from_span":null},"id":199,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":11}},"generics":{"regions":[{"Body":50}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":775}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":729,"col":85},"end":{"line":729,"col":86}},"generated_from_span":null},"id":200,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":201,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":202,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":203,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":204,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":205,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":0},"end":{"line":730,"col":1}},"generated_from_span":null},"id":206,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":0,"beg":{"line":730,"col":1},"end":{"line":730,"col":1}},"generated_from_span":null},"id":207,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":2,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}},{"Ident":["try_from",0]}],"span":{"data":{"file_id":7,"beg":{"line":212,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"source_text":"fn try_from(sig: &ed25519::Signature) -> Result<InternalSignature, SignatureError> {\n InternalSignature::from_bytes(&sig.to_bytes())\n }","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1398,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":347},"Shared"]}]}],"output":{"Deduplicated":524}},"src":{"TraitImpl":{"impl_ref":{"id":0,"generics":{"regions":[{"Var":{"Free":0}}],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":1398},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":212,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"bound_body_regions":10,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":212,"col":45},"end":{"line":212,"col":86}},"generated_from_span":null},"ty":{"Deduplicated":524}},{"index":1,"name":"sig","span":{"data":{"file_id":7,"beg":{"line":212,"col":16},"end":{"line":212,"col":19}},"generated_from_span":null},"ty":{"HashConsedValue":[873,{"Ref":[{"Body":1},{"Deduplicated":347},"Shared"]}]}},{"index":2,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[875,{"Ref":[{"Body":3},{"Deduplicated":752},"Shared"]}]}},{"index":3,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"HashConsedValue":[876,{"Ref":[{"Body":4},{"Deduplicated":752},"Shared"]}]}},{"index":4,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"ty":{"Deduplicated":752}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":389}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":214,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":208,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":209,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"id":210,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"id":211,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":42}},"generated_from_span":null},"id":212,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":389}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":873}},"Deref"]},"ty":{"Deduplicated":347}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":39},"end":{"line":213,"col":53}},"generated_from_span":null},"id":213,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":12}},"generics":{"regions":[{"Body":7}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":389}}}],"dest":{"kind":{"Local":4},"ty":{"Deduplicated":752}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":52},"end":{"line":213,"col":53}},"generated_from_span":null},"id":214,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":215,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":876}},{"Ref":{"place":{"kind":{"Local":4},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":38},"end":{"line":213,"col":53}},"generated_from_span":null},"id":216,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":875}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":3},"ty":{"Deduplicated":876}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":8},"end":{"line":213,"col":54}},"generated_from_span":null},"id":217,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":13}},"generics":{"regions":[{"Body":9}],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":2},"ty":{"Deduplicated":875}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":213,"col":53},"end":{"line":213,"col":54}},"generated_from_span":null},"id":218,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"id":219,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":4},"end":{"line":214,"col":5}},"generated_from_span":null},"id":220,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":214,"col":5},"end":{"line":214,"col":5}},"generated_from_span":null},"id":221,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["branch",0]}],"span":{"data":{"file_id":3,"beg":{"line":2177,"col":4},"end":{"line":2177,"col":64}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1399,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}]}],"output":{"HashConsedValue":[1426,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1401,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":519},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}]},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":1},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":4,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":557},"kind":"InherentImplBlock"}}},{"Ident":["as_bytes",0]}],"span":{"data":{"file_id":11,"beg":{"line":180,"col":4},"end":{"line":180,"col":45}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" View this `CompressedEdwardsY` as an array of bytes."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1427,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":557},"Shared"]}]}],"output":{"HashConsedValue":[1428,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":566},"Shared"]}]}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}},{"Ident":["from_residual",0]}],"span":{"data":{"file_id":3,"beg":{"line":2192,"col":4},"end":{"line":2192,"col":70}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"},{"index":2,"name":"F"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":3,"beg":{"line":2187,"col":20},"end":{"line":2187,"col":35}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"HashConsedValue":[1404,{"TypeVar":{"Free":2}}]},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1401}],"output":{"HashConsedValue":[1405,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitImpl":{"impl_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1406,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1404},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1405},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}},{"Ident":["into",0]}],"span":{"data":{"file_id":10,"beg":{"line":777,"col":4},"end":{"line":777,"col":22}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Calls `U::from(self)`."},{"DocComment":""},{"DocComment":" That is, this conversion is whatever the implementation of"},{"DocComment":" <code>[From]<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":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitImpl":{"impl_ref":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1407,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]}]}},"trait_ref":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":7,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["verifying",0]},{"Ident":["sha512_hash3",0]}],"span":{"data":{"file_id":0,"beg":{"line":708,"col":0},"end":{"line":714,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn sha512_hash3(r: &[u8], a: &[u8], m: &[u8]) -> [u8; 64] {\n let mut h: Sha512 = Digest::new();\n Digest::update(&mut h, r);\n Digest::update(&mut h, a);\n Digest::update(&mut h, m);\n Digest::finalize(h).into()\n}","attr_info":{"attributes":[{"DocComment":" AENEAS-COMPAT: the whole three-part hash as ONE monomorphic call whose"},{"DocComment":" signature carries no foreign types (this fork's sha2-0.10 `Sha512` type"},{"DocComment":" alias cannot be declared opaque by the extractor). Semantically:"},{"DocComment":" `Sha512::new().chain(r).chain(a).chain(m).finalize()`."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1429,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":337},"Shared"]}]},{"Deduplicated":1422},{"Deduplicated":1425}],"output":{"Deduplicated":752}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":8,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order_wide",0]}],"span":{"data":{"file_id":14,"beg":{"line":257,"col":4},"end":{"line":257,"col":64}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Construct a `Scalar` by reducing a 512-bit little-endian integer"},{"DocComment":" modulo the group order \\\\( \\ell \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1430,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":752},"Shared"]}]}],"output":{"Deduplicated":748}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":9,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}},{"Ident":["neg",0]}],"span":{"data":{"file_id":11,"beg":{"line":704,"col":4},"end":{"line":704,"col":32}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":772}],"output":{"Deduplicated":772}},"src":{"TraitImpl":{"impl_ref":{"id":6,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":772},{"Deduplicated":772}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":10,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["vartime_double_scalar_mul_basepoint",0]}],"span":{"data":{"file_id":11,"beg":{"line":907,"col":4},"end":{"line":911,"col":21}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Compute \\\\(aA + bB\\\\) in variable time, where \\\\(B\\\\) is the Ed25519 basepoint."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"},{"index":1,"name":null,"mutability":"Unknown"},{"index":2,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1431,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":748},"Shared"]}]},{"HashConsedValue":[1432,{"Ref":[{"Var":{"Free":1}},{"Deduplicated":772},"Shared"]}]},{"HashConsedValue":[1433,{"Ref":[{"Var":{"Free":2}},{"Deduplicated":748},"Shared"]}]}],"output":{"Deduplicated":772}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":11,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":772},"kind":"InherentImplBlock"}}},{"Ident":["compress",0]}],"span":{"data":{"file_id":11,"beg":{"line":571,"col":4},"end":{"line":571,"col":48}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Compress this point to `CompressedEdwardsY` format."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1434,{"Ref":[{"Var":{"Free":0}},{"Deduplicated":772},"Shared"]}]}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":12,"item_meta":{"name":[{"Ident":["ed25519",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":347},"kind":"InherentImplBlock"}}},{"Ident":["to_bytes",0]}],"span":{"data":{"file_id":2,"beg":{"line":351,"col":4},"end":{"line":351,"col":44}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Return the inner byte array."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1398}],"output":{"Deduplicated":752}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":13,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":413},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes",0]}],"span":{"data":{"file_id":7,"beg":{"line":188,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"source_text":"pub fn from_bytes(bytes: &[u8; SIGNATURE_LENGTH]) -> Result<InternalSignature, SignatureError> {\n // TODO: Use bytes.split_array_ref once 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":1430}],"output":{"Deduplicated":524}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":188,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"bound_body_regions":2,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":188,"col":57},"end":{"line":188,"col":98}},"generated_from_span":null},"ty":{"Deduplicated":524}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":188,"col":22},"end":{"line":188,"col":27}},"generated_from_span":null},"ty":{"HashConsedValue":[998,{"Ref":[{"Body":1},{"Deduplicated":752},"Shared"]}]}},{"index":2,"name":"R_bytes","span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":3,"name":"s_bytes","span":{"data":{"file_id":7,"beg":{"line":194,"col":12},"end":{"line":194,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":7,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":413}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":557}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"HashConsedValue":[1001,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":520},{"Deduplicated":748}],"const_generics":[],"trait_refs":[]}}}]}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"ty":{"HashConsedValue":[1004,{"Adt":{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}}]}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":23,"name":"residual","span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":520}},{"index":25,"name":"val","span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":26,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1213,{"Ref":["Erased",{"Deduplicated":752},"Shared"]}]}},{"index":27,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":28,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1215,{"Ref":["Erased",{"Deduplicated":566},"Mut"]}]}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"HashConsedValue":[1214,{"Ref":["Erased",{"Deduplicated":336},"Mut"]}]}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1213}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1215}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1214}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":206,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":225,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":228,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":12},"end":{"line":193,"col":23}},"generated_from_span":null},"id":230,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":193,"col":36},"end":{"line":193,"col":45}},"generated_from_span":null},"id":231,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}}],"dest":{"kind":{"Local":2},"ty":{"Deduplicated":566}}}},"comments_before":["TODO: Use bytes.split_array_ref once 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":194,"col":12},"end":{"line":194,"col":23}},"generated_from_span":null},"id":232,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":194,"col":36},"end":{"line":194,"col":45}},"generated_from_span":null},"id":233,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":"ArrayRepeat"}},"generics":{"regions":[],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}}],"dest":{"kind":{"Local":3},"ty":{"Deduplicated":566}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":12},"end":{"line":195,"col":17}},"generated_from_span":null},"id":234,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":195,"col":20},"end":{"line":195,"col":21}},"generated_from_span":null},"id":235,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":283,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":237,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"id":238,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":15}},"generated_from_span":null},"id":239,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":240,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":282,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":19},"end":{"line":196,"col":20}},"generated_from_span":null},"id":241,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":242,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"id":243,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":31},"end":{"line":197,"col":32}},"generated_from_span":null},"id":244,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":490,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":491,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":1213}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":998}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":492,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":493,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":1213}}},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":25},"end":{"line":197,"col":33}},"generated_from_span":null},"id":247,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":27},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"id":248,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":20},"end":{"line":197,"col":21}},"generated_from_span":null},"id":249,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":494,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":495,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":1215}},{"Ref":{"place":{"kind":{"Local":2},"ty":{"Deduplicated":566}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":496,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":497,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":1215}}},{"Copy":{"kind":{"Local":9},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":29},"ty":{"Deduplicated":1214}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":12},"end":{"line":197,"col":33}},"generated_from_span":null},"id":252,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":29},"ty":{"Deduplicated":1214}},"Deref"]},"ty":{"Deduplicated":336}},{"Use":[{"Move":{"kind":{"Local":7},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":32},"end":{"line":197,"col":33}},"generated_from_span":null},"id":253,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":33},"end":{"line":197,"col":34}},"generated_from_span":null},"id":254,"kind":{"StorageDead":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":197,"col":33},"end":{"line":197,"col":34}},"generated_from_span":null},"id":255,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":256,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":257,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"id":258,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":32}},"generated_from_span":null},"id":259,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":260,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":12},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":31},"end":{"line":198,"col":37}},"generated_from_span":null},"id":262,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":13},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":36},"end":{"line":198,"col":37}},"generated_from_span":null},"id":263,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":498,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":499,"kind":{"Assign":[{"kind":{"Local":30},"ty":{"Deduplicated":1213}},{"Ref":{"place":{"kind":{"Projection":[{"kind":{"Local":1},"ty":{"Deduplicated":998}},"Deref"]},"ty":{"Deduplicated":752}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":500,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":501,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","64"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":30},"ty":{"Deduplicated":1213}}},{"Copy":{"kind":{"Local":11},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":31},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":25},"end":{"line":198,"col":38}},"generated_from_span":null},"id":266,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":31},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"id":267,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":20},"end":{"line":198,"col":21}},"generated_from_span":null},"id":268,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":502,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":503,"kind":{"Assign":[{"kind":{"Local":32},"ty":{"Deduplicated":1215}},{"Ref":{"place":{"kind":{"Local":3},"ty":{"Deduplicated":566}},"kind":"Mut","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":504,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":505,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Mut","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":32},"ty":{"Deduplicated":1215}}},{"Copy":{"kind":{"Local":14},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":33},"ty":{"Deduplicated":1214}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":12},"end":{"line":198,"col":38}},"generated_from_span":null},"id":271,"kind":{"Assign":[{"kind":{"Projection":[{"kind":{"Local":33},"ty":{"Deduplicated":1214}},"Deref"]},"ty":{"Deduplicated":336}},{"Use":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":37},"end":{"line":198,"col":38}},"generated_from_span":null},"id":272,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":38},"end":{"line":198,"col":39}},"generated_from_span":null},"id":273,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":198,"col":38},"end":{"line":198,"col":39}},"generated_from_span":null},"id":274,"kind":{"StorageDead":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"id":275,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Add":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":199,"col":12},"end":{"line":199,"col":18}},"generated_from_span":null},"id":277,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":15},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":279,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":280,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":196,"col":14},"end":{"line":196,"col":20}},"generated_from_span":null},"id":281,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":196,"col":19},"end":{"line":196,"col":20}},"generated_from_span":null},"id":284,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":200,"col":8},"end":{"line":200,"col":9}},"generated_from_span":null},"id":288,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"id":290,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"id":291,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"id":292,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":37},"end":{"line":203,"col":44}},"generated_from_span":null},"id":293,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":15},"end":{"line":203,"col":45}},"generated_from_span":null},"id":294,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":19}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":17},"ty":{"Deduplicated":557}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":203,"col":44},"end":{"line":203,"col":45}},"generated_from_span":null},"id":295,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":296,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":297,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"id":298,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"id":299,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":28},"end":{"line":204,"col":35}},"generated_from_span":null},"id":300,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":36}},"generated_from_span":null},"id":301,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":20}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":22},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":21},"ty":{"Deduplicated":1004}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":35},"end":{"line":204,"col":36}},"generated_from_span":null},"id":302,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":303,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":3}},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":21},"ty":{"Deduplicated":1004}}}],"dest":{"kind":{"Local":20},"ty":{"Deduplicated":1001}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":304,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":206,"col":5}},"generated_from_span":null},"id":323,"kind":{"Switch":{"Match":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},[[[0],{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"statements":[]}],[[1],{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":206,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":307,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":308,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},{"Field":[{"Adt":[5,1]},0]}]},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":309,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":310,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":520}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":520}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":311,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":5}},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"Deduplicated":709}]}}},"args":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":520}}}],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":524}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":312,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":313,"kind":{"StorageDead":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":314,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":315,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":9},"end":{"line":205,"col":10}},"generated_from_span":null},"id":316,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":317,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":318,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":319,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":320,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":5},"end":{"line":206,"col":5}},"generated_from_span":null},"id":321,"kind":"Return","comments_before":[]}]}]],null]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":324,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":325,"kind":{"Assign":[{"kind":{"Local":25},"ty":{"Deduplicated":748}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":20},"ty":{"Deduplicated":1001}},{"Field":[{"Adt":[5,0]},0]}]},"ty":{"Deduplicated":748}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":15},"end":{"line":204,"col":37}},"generated_from_span":null},"id":326,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":748}},{"Use":[{"Copy":{"kind":{"Local":25},"ty":{"Deduplicated":748}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":204,"col":36},"end":{"line":204,"col":37}},"generated_from_span":null},"id":327,"kind":{"StorageDead":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":11},"end":{"line":205,"col":9}},"generated_from_span":null},"id":328,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":413}},{"Aggregate":[{"Adt":[{"id":{"Adt":4},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},null,null]},[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":557}}},{"Move":{"kind":{"Local":19},"ty":{"Deduplicated":748}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":329,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":8},"end":{"line":205,"col":9}},"generated_from_span":null},"id":330,"kind":{"StorageDead":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":202,"col":8},"end":{"line":205,"col":10}},"generated_from_span":null},"id":331,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":524}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":16},"ty":{"Deduplicated":413}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":205,"col":9},"end":{"line":205,"col":10}},"generated_from_span":null},"id":332,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":333,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":334,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":335,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":4},"end":{"line":206,"col":5}},"generated_from_span":null},"id":336,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":206,"col":5},"end":{"line":206,"col":5}},"generated_from_span":null},"id":337,"kind":"Return","comments_before":[]}]},"comments":[[193,["TODO: Use bytes.split_array_ref once 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":14,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}},{"Ident":["from_output",0]}],"span":{"data":{"file_id":3,"beg":{"line":2172,"col":4},"end":{"line":2172,"col":48}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":"Hint","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1399}},"src":{"TraitImpl":{"impl_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":15,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]},{"Ident":["from",0]}],"span":{"data":{"file_id":10,"beg":{"line":592,"col":4},"end":{"line":592,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Converts to this type from the input type."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_fn"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":16,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}},{"Ident":["from",0]}],"span":{"data":{"file_id":10,"beg":{"line":788,"col":4},"end":{"line":788,"col":22}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Returns the argument unchanged."}],"inline":"Always","rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1394}},"src":{"TraitImpl":{"impl_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":"Opaque"},{"def_id":17,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}},{"Ident":["from",0]}],"span":{"data":{"file_id":13,"beg":{"line":111,"col":4},"end":{"line":113,"col":5}},"generated_from_span":null},"source_text":"fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":611}],"output":{"Deduplicated":379}},"src":{"TraitImpl":{"impl_ref":{"id":5,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"trait_ref":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"reuses_default":true}},"is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":13,"beg":{"line":111,"col":4},"end":{"line":113,"col":5}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":13,"beg":{"line":111,"col":36},"end":{"line":111,"col":50}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":1,"name":"_err","span":{"data":{"file_id":13,"beg":{"line":111,"col":12},"end":{"line":111,"col":16}},"generated_from_span":null},"ty":{"Deduplicated":611}}]},"body":{"span":{"data":{"file_id":13,"beg":{"line":113,"col":5},"end":{"line":113,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":13,"beg":{"line":112,"col":8},"end":{"line":112,"col":29}},"generated_from_span":null},"id":338,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":25}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[],"dest":{"kind":{"Local":0},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":13,"beg":{"line":113,"col":5},"end":{"line":113,"col":5}},"generated_from_span":null},"id":339,"kind":"Return","comments_before":[]}]},"comments":[]}}},{"def_id":18,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]},{"Ident":["try_from",0]}],"span":{"data":{"file_id":10,"beg":{"line":702,"col":4},"end":{"line":702,"col":55}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Performs the conversion."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"try_from_fn"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"},{"index":2,"name":"Clause0_Error"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1405}},"src":{"TraitDecl":{"trait_ref":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":19,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["compressed_from_bytes",0]}],"span":{"data":{"file_id":7,"beg":{"line":69,"col":0},"end":{"line":71,"col":1}},"generated_from_span":null},"source_text":"pub(crate) fn compressed_from_bytes(bytes: [u8; 32]) -> CompressedEdwardsY {\n CompressedEdwardsY(bytes)\n}","attr_info":{"attributes":[{"DocComment":" AENEAS-COMPAT (formal verification): opaque constructor — building the"},{"DocComment":" (extraction-opaque) `CompressedEdwardsY` aggregate directly cannot be"},{"DocComment":" interpreted by the extractor. Semantics: the tuple constructor."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":557}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":20,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]}],"span":{"data":{"file_id":7,"beg":{"line":106,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"source_text":"fn check_scalar(bytes: [u8; 32]) -> Result<Scalar, SignatureError> {\n /// ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian.\n const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];\n // bytes < ℓ, most-significant byte first; the first differing byte decides.\n let mut lt = false;\n let mut decided = false;\n let mut i = 32;\n while i > 0 {\n let j = i - 1;\n if !decided {\n if bytes[j] < L_BYTES[j] {\n lt = true;\n decided = true;\n } else if bytes[j] > L_BYTES[j] {\n decided = true;\n }\n }\n i -= 1;\n }\n if lt {\n Ok(Scalar::from_bytes_mod_order(bytes))\n } else {\n Err(InternalError::ScalarFormat.into())\n }\n}","attr_info":{"attributes":[{"DocComment":" Ensures that the scalar `s` of a signature is within the bounds [0, ℓ)"},{"DocComment":""},{"DocComment":" AENEAS-COMPAT (formal verification): explicit little-endian comparison"},{"DocComment":" against ℓ followed by `from_bytes_mod_order` (the identity on canonical"},{"DocComment":" bytes) — value-level semantics identical to"},{"DocComment":" `Scalar::from_canonical_bytes(bytes).into()`; the subtle machinery's"},{"DocComment":" `black_box` internals defeat the extractor, and the verification path is"},{"DocComment":" variable-time throughout."}],"inline":"Always","rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":1004}},"src":"TopLevel","is_global_initializer":null,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":106,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":1,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":106,"col":36},"end":{"line":106,"col":66}},"generated_from_span":null},"ty":{"Deduplicated":1004}},{"index":1,"name":"bytes","span":{"data":{"file_id":7,"beg":{"line":106,"col":16},"end":{"line":106,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":2,"name":"lt","span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":3,"name":"decided","span":{"data":{"file_id":7,"beg":{"line":114,"col":8},"end":{"line":114,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":4,"name":"i","span":{"data":{"file_id":7,"beg":{"line":115,"col":8},"end":{"line":115,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":5,"name":null,"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":6,"name":null,"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":7,"name":"j","span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":117,"col":13}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":8,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":9,"name":null,"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":10,"name":null,"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":11,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":12,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":13,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":14,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":15,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":16,"name":null,"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":17,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":18,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":19,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":20,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"ty":{"Deduplicated":336}},{"index":21,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":22,"name":null,"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":23,"name":null,"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"ty":{"Deduplicated":565}},{"index":24,"name":null,"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"ty":{"Deduplicated":575}},{"index":25,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":748}},{"index":26,"name":null,"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"ty":{"Deduplicated":566}},{"index":27,"name":null,"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"ty":{"Deduplicated":379}},{"index":28,"name":null,"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"ty":{"Deduplicated":611}},{"index":29,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":30,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":31,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":32,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":33,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":34,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}},{"index":35,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1212}},{"index":36,"name":null,"span":{"data":{"file_id":0,"beg":{"line":0,"col":0},"end":{"line":0,"col":0}},"generated_from_span":null},"ty":{"Deduplicated":1211}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":133,"col":1}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":341,"kind":{"StorageLive":9},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":346,"kind":{"StorageLive":23},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":8},"end":{"line":113,"col":14}},"generated_from_span":null},"id":347,"kind":{"StorageLive":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":113,"col":17},"end":{"line":113,"col":22}},"generated_from_span":null},"id":348,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":["/ ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian.","bytes < ℓ, most-significant byte first; the first differing byte decides."]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":8},"end":{"line":114,"col":19}},"generated_from_span":null},"id":349,"kind":{"StorageLive":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":114,"col":22},"end":{"line":114,"col":27}},"generated_from_span":null},"id":350,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":false}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":8},"end":{"line":115,"col":13}},"generated_from_span":null},"id":351,"kind":{"StorageLive":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":115,"col":16},"end":{"line":115,"col":18}},"generated_from_span":null},"id":352,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":449,"kind":{"Loop":{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":354,"kind":{"StorageLive":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"id":355,"kind":{"StorageLive":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":11}},"generated_from_span":null},"id":356,"kind":{"Assign":[{"kind":{"Local":6},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":357,"kind":{"Assign":[{"kind":{"Local":5},"ty":{"Deduplicated":575}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":6},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","0"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":448,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":5},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":14},"end":{"line":116,"col":15}},"generated_from_span":null},"id":358,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":12},"end":{"line":117,"col":13}},"generated_from_span":null},"id":359,"kind":{"StorageLive":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"id":360,"kind":{"StorageLive":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":17}},"generated_from_span":null},"id":361,"kind":{"Assign":[{"kind":{"Local":8},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"id":362,"kind":{"Assign":[{"kind":{"Local":9},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":8},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":16},"end":{"line":117,"col":21}},"generated_from_span":null},"id":364,"kind":{"Assign":[{"kind":{"Local":7},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":9},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":117,"col":20},"end":{"line":117,"col":21}},"generated_from_span":null},"id":365,"kind":{"StorageDead":8},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"id":367,"kind":{"StorageLive":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"id":368,"kind":{"Assign":[{"kind":{"Local":10},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":3},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"id":437,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":10},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":12},"end":{"line":118,"col":19}},"generated_from_span":null},"statements":[]},{"span":{"data":{"file_id":7,"beg":{"line":118,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"id":370,"kind":{"StorageLive":11},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":371,"kind":{"StorageLive":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"id":372,"kind":{"StorageLive":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":21},"end":{"line":119,"col":22}},"generated_from_span":null},"id":373,"kind":{"Assign":[{"kind":{"Local":13},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":514,"kind":{"StorageLive":33},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":515,"kind":{"Assign":[{"kind":{"Local":33},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":516,"kind":{"StorageLive":34},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":517,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":33},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":13},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":34},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":23}},"generated_from_span":null},"id":376,"kind":{"Assign":[{"kind":{"Local":12},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":34},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":377,"kind":{"StorageLive":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"id":378,"kind":{"StorageLive":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":33}},"generated_from_span":null},"id":379,"kind":{"Assign":[{"kind":{"Local":15},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"id":380,"kind":{"StorageLive":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":34},"end":{"line":119,"col":35}},"generated_from_span":null},"id":381,"kind":{"Assign":[{"kind":{"Local":16},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":518,"kind":{"StorageLive":35},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":519,"kind":{"Assign":[{"kind":{"Local":35},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":15},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":520,"kind":{"StorageLive":36},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":521,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":35},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":16},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":36},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":26},"end":{"line":119,"col":36}},"generated_from_span":null},"id":384,"kind":{"Assign":[{"kind":{"Local":14},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":36},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":15},"end":{"line":119,"col":36}},"generated_from_span":null},"id":385,"kind":{"Assign":[{"kind":{"Local":11},"ty":{"Deduplicated":575}},{"BinaryOp":["Lt",{"Move":{"kind":{"Local":12},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":14},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":434,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":11},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":386,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":387,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":388,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":389,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":390,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":120,"col":16},"end":{"line":120,"col":25}},"generated_from_span":null},"id":391,"kind":{"Assign":[{"kind":{"Local":2},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":121,"col":16},"end":{"line":121,"col":30}},"generated_from_span":null},"id":392,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":395,"kind":{"StorageDead":16},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":396,"kind":{"StorageDead":15},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":397,"kind":{"StorageDead":14},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":398,"kind":{"StorageDead":13},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":119,"col":35},"end":{"line":119,"col":36}},"generated_from_span":null},"id":399,"kind":{"StorageDead":12},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"id":400,"kind":{"StorageLive":17},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":401,"kind":{"StorageLive":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"id":402,"kind":{"StorageLive":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":28},"end":{"line":122,"col":29}},"generated_from_span":null},"id":403,"kind":{"Assign":[{"kind":{"Local":19},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":506,"kind":{"StorageLive":29},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":507,"kind":{"Assign":[{"kind":{"Local":29},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":1},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":508,"kind":{"StorageLive":30},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":509,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":29},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":19},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":30},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":30}},"generated_from_span":null},"id":406,"kind":{"Assign":[{"kind":{"Local":18},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":30},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":407,"kind":{"StorageLive":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"id":408,"kind":{"StorageLive":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":40}},"generated_from_span":null},"id":409,"kind":{"Assign":[{"kind":{"Local":21},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Global":{"id":1,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"id":410,"kind":{"StorageLive":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":41},"end":{"line":122,"col":42}},"generated_from_span":null},"id":411,"kind":{"Assign":[{"kind":{"Local":22},"ty":{"Deduplicated":565}},{"Use":[{"Copy":{"kind":{"Local":7},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":510,"kind":{"StorageLive":31},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":511,"kind":{"Assign":[{"kind":{"Local":31},"ty":{"Deduplicated":1212}},{"Ref":{"place":{"kind":{"Local":21},"ty":{"Deduplicated":566}},"kind":"Shared","ptr_metadata":{"Const":{"kind":{"Adt":[null,[]]},"ty":{"Deduplicated":372}}}}}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":512,"kind":{"StorageLive":32},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":513,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Builtin":{"Index":{"is_array":true,"mutability":"Shared","is_range":false}}}},"generics":{"regions":["Erased"],"types":[{"Deduplicated":336}],"const_generics":[{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":31},"ty":{"Deduplicated":1212}}},{"Copy":{"kind":{"Local":22},"ty":{"Deduplicated":565}}}],"dest":{"kind":{"Local":32},"ty":{"Deduplicated":1211}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":33},"end":{"line":122,"col":43}},"generated_from_span":null},"id":414,"kind":{"Assign":[{"kind":{"Local":20},"ty":{"Deduplicated":336}},{"Use":[{"Copy":{"kind":{"Projection":[{"kind":{"Local":32},"ty":{"Deduplicated":1211}},"Deref"]},"ty":{"Deduplicated":336}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":22},"end":{"line":122,"col":43}},"generated_from_span":null},"id":415,"kind":{"Assign":[{"kind":{"Local":17},"ty":{"Deduplicated":575}},{"BinaryOp":["Gt",{"Move":{"kind":{"Local":18},"ty":{"Deduplicated":336}}},{"Move":{"kind":{"Local":20},"ty":{"Deduplicated":336}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"id":431,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":17},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":416,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":417,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":418,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":419,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":420,"kind":{"StorageDead":18},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":123,"col":16},"end":{"line":123,"col":30}},"generated_from_span":null},"id":421,"kind":{"Assign":[{"kind":{"Local":3},"ty":{"Deduplicated":575}},{"Use":[{"Const":{"kind":{"Literal":{"Bool":true}},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":19},"end":{"line":124,"col":13}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":424,"kind":{"StorageDead":22},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":425,"kind":{"StorageDead":21},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":426,"kind":{"StorageDead":20},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":427,"kind":{"StorageDead":19},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":122,"col":42},"end":{"line":122,"col":43}},"generated_from_span":null},"id":428,"kind":{"StorageDead":18},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":432,"kind":{"StorageDead":17},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":124,"col":12},"end":{"line":124,"col":13}},"generated_from_span":null},"id":435,"kind":{"StorageDead":11},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":125,"col":8},"end":{"line":125,"col":9}},"generated_from_span":null},"id":438,"kind":{"StorageDead":10},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"id":440,"kind":{"Assign":[{"kind":{"Local":23},"ty":{"Deduplicated":565}},{"BinaryOp":[{"Sub":"Panic"},{"Copy":{"kind":{"Local":4},"ty":{"Deduplicated":565}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","1"]}}},"ty":{"Deduplicated":565}}}]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":126,"col":8},"end":{"line":126,"col":14}},"generated_from_span":null},"id":442,"kind":{"Assign":[{"kind":{"Local":4},"ty":{"Deduplicated":565}},{"Use":[{"Move":{"kind":{"Local":23},"ty":{"Deduplicated":565}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":444,"kind":{"StorageDead":7},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":445,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":446,"kind":{"Continue":0},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":116,"col":10},"end":{"line":116,"col":15}},"generated_from_span":null},"id":447,"kind":{"Break":0},"comments_before":[]}]}]}},"comments_before":[]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":116,"col":14},"end":{"line":116,"col":15}},"generated_from_span":null},"id":450,"kind":{"StorageDead":6},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":127,"col":4},"end":{"line":127,"col":5}},"generated_from_span":null},"id":454,"kind":{"StorageDead":5},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"id":456,"kind":{"StorageLive":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":7},"end":{"line":128,"col":9}},"generated_from_span":null},"id":457,"kind":{"Assign":[{"kind":{"Local":24},"ty":{"Deduplicated":575}},{"Use":[{"Copy":{"kind":{"Local":2},"ty":{"Deduplicated":575}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"id":474,"kind":{"Switch":{"If":[{"Move":{"kind":{"Local":24},"ty":{"Deduplicated":575}}},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"id":458,"kind":{"StorageLive":25},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"id":459,"kind":{"StorageLive":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":40},"end":{"line":129,"col":45}},"generated_from_span":null},"id":460,"kind":{"Assign":[{"kind":{"Local":26},"ty":{"Deduplicated":566}},{"Use":[{"Copy":{"kind":{"Local":1},"ty":{"Deduplicated":566}}},"Yes"]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":11},"end":{"line":129,"col":46}},"generated_from_span":null},"id":461,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":27}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},"args":[{"Move":{"kind":{"Local":26},"ty":{"Deduplicated":566}}}],"dest":{"kind":{"Local":25},"ty":{"Deduplicated":748}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":45},"end":{"line":129,"col":46}},"generated_from_span":null},"id":462,"kind":{"StorageDead":26},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":8},"end":{"line":129,"col":47}},"generated_from_span":null},"id":463,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1004}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},0,null]},[{"Move":{"kind":{"Local":25},"ty":{"Deduplicated":748}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":129,"col":46},"end":{"line":129,"col":47}},"generated_from_span":null},"id":464,"kind":{"StorageDead":25},"comments_before":[]}]},{"span":{"data":{"file_id":7,"beg":{"line":128,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"id":466,"kind":{"StorageLive":27},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"id":467,"kind":{"StorageLive":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":39}},"generated_from_span":null},"id":468,"kind":{"Assign":[{"kind":{"Local":28},"ty":{"Deduplicated":611}},{"Aggregate":[{"Adt":[{"id":{"Adt":8},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},1,null]},[]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":12},"end":{"line":131,"col":46}},"generated_from_span":null},"id":469,"kind":{"Call":{"func":{"Regular":{"kind":{"Fun":{"Regular":6}},"generics":{"regions":[],"types":[{"Deduplicated":611},{"Deduplicated":379}],"const_generics":[],"trait_refs":[{"Deduplicated":732}]}}},"args":[{"Move":{"kind":{"Local":28},"ty":{"Deduplicated":611}}}],"dest":{"kind":{"Local":27},"ty":{"Deduplicated":379}}}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":45},"end":{"line":131,"col":46}},"generated_from_span":null},"id":470,"kind":{"StorageDead":28},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":8},"end":{"line":131,"col":47}},"generated_from_span":null},"id":471,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":1004}},{"Aggregate":[{"Adt":[{"id":{"Adt":2},"generics":{"regions":[],"types":[{"Deduplicated":748},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},1,null]},[{"Move":{"kind":{"Local":27},"ty":{"Deduplicated":379}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":131,"col":46},"end":{"line":131,"col":47}},"generated_from_span":null},"id":472,"kind":{"StorageDead":27},"comments_before":[]}]}]}},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":132,"col":4},"end":{"line":132,"col":5}},"generated_from_span":null},"id":475,"kind":{"StorageDead":24},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":476,"kind":{"StorageDead":4},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":477,"kind":{"StorageDead":3},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":0},"end":{"line":133,"col":1}},"generated_from_span":null},"id":478,"kind":{"StorageDead":2},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":133,"col":1},"end":{"line":133,"col":1}},"generated_from_span":null},"id":479,"kind":"Return","comments_before":[]}]},"comments":[[108,["/ ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian."]],[113,["bytes < ℓ, most-significant byte first; the first differing byte decides."]]]}}},{"def_id":21,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["from_output",0]}],"span":{"data":{"file_id":15,"beg":{"line":192,"col":4},"end":{"line":192,"col":49}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Constructs the type from its `Output` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method"},{"DocComment":" such that applying the `?` operator will get back the original value:"},{"DocComment":" `Try::from_output(x).branch() --> ControlFlow::Continue(x)`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::Try;"},{"DocComment":""},{"DocComment":" assert_eq!(<Result<_, String> as Try>::from_output(3), Ok(3));"},{"DocComment":" assert_eq!(<Option<_> as Try>::from_output(4), Some(4));"},{"DocComment":" assert_eq!("},{"DocComment":" <std::ops::ControlFlow<String, _> as Try>::from_output(5),"},{"DocComment":" std::ops::ControlFlow::Continue(5),"},{"DocComment":" );"},{"DocComment":""},{"DocComment":" # fn make_question_mark_work() -> Option<()> {"},{"DocComment":" assert_eq!(Option::from_output(4)?, 4);"},{"DocComment":" # None }"},{"DocComment":" # make_question_mark_work();"},{"DocComment":""},{"DocComment":" // This is used, for example, on the accumulator in `try_fold`:"},{"DocComment":" let r = std::iter::empty().try_fold(4, |_, ()| -> Option<_> { unreachable!() });"},{"DocComment":" assert_eq!(r, Some(4));"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_output"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"HashConsedValue":[1436,{"TraitType":[{"HashConsedValue":[1435,{"kind":{"Clause":{"Free":0}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":22,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]},{"Ident":["branch",0]}],"span":{"data":{"file_id":15,"beg":{"line":219,"col":4},"end":{"line":219,"col":65}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used in `?` to decide whether the operator should produce a value"},{"DocComment":" (because this returned [`ControlFlow::Continue`])"},{"DocComment":" or propagate a value back to the caller"},{"DocComment":" (because this returned [`ControlFlow::Break`])."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, Try};"},{"DocComment":""},{"DocComment":" assert_eq!(Ok::<_, String>(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(Err::<String, _>(3).branch(), ControlFlow::Break(Err(3)));"},{"DocComment":""},{"DocComment":" assert_eq!(Some(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(None::<String>.branch(), ControlFlow::Break(None));"},{"DocComment":""},{"DocComment":" assert_eq!(ControlFlow::<String, _>::Continue(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::Break(3).branch(),"},{"DocComment":" ControlFlow::Break(ControlFlow::Break(3)),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"branch"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"HashConsedValue":[1438,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"HashConsedValue":[1437,{"TraitType":[{"Deduplicated":1435},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"Deduplicated":1436}],"const_generics":[],"trait_refs":[]}}}]}},"src":{"TraitDecl":{"trait_ref":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":1},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":23,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]},{"Ident":["from_residual",0]}],"span":{"data":{"file_id":15,"beg":{"line":333,"col":4},"end":{"line":333,"col":42}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Constructs the type from a compatible `Residual` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method such"},{"DocComment":" that applying the `?` operator will get back an equivalent residual:"},{"DocComment":" `FromResidual::from_residual(r).branch() --> ControlFlow::Break(r)`."},{"DocComment":" (The residual is not mandated to be *identical* when interconversion is involved.)"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, FromResidual};"},{"DocComment":""},{"DocComment":" assert_eq!(Result::<String, i64>::from_residual(Err(3_u8)), Err(3));"},{"DocComment":" assert_eq!(Option::<String>::from_residual(None), None);"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::from_residual(ControlFlow::Break(5)),"},{"DocComment":" ControlFlow::Break(5),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"from_residual"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"R"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"src":{"TraitDecl":{"trait_ref":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":24,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]},{"Ident":["into",0]}],"span":{"data":{"file_id":10,"beg":{"line":454,"col":4},"end":{"line":454,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Converts this type into the (usually inferred) input type."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitDecl":{"trait_ref":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":25,"item_meta":{"name":[{"Ident":["signature",0]},{"Ident":["error",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":379},"kind":"InherentImplBlock"}}},{"Ident":["new",0]}],"span":{"data":{"file_id":5,"beg":{"line":34,"col":4},"end":{"line":34,"col":24}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Create a new error with no associated source"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[],"output":{"Deduplicated":379}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":26,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]},{"Ident":["neg",0]}],"span":{"data":{"file_id":16,"beg":{"line":706,"col":4},"end":{"line":706,"col":33}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Performs the unary `-` operation."},{"DocComment":""},{"DocComment":" # Example"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let x: i32 = 12;"},{"DocComment":" assert_eq!(-x, -12);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"neg"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"Clause0_Output"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":1,"beg":{"line":1,"col":0},"end":{"line":1,"col":0}},"generated_from_span":null},"origin":"WhereClauseOnFn","trait_":{"regions":[],"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"src":{"TraitDecl":{"trait_ref":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"item_id":{"Method":0},"has_default":false}},"is_global_initializer":null,"body":"Opaque"},{"def_id":27,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["scalar",0]},{"Impl":{"Ty":{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"Deduplicated":748},"kind":"InherentImplBlock"}}},{"Ident":["from_bytes_mod_order",0]}],"span":{"data":{"file_id":14,"beg":{"line":244,"col":4},"end":{"line":244,"col":58}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Construct a `Scalar` by reducing a 256-bit little-endian integer"},{"DocComment":" modulo the group order \\\\( \\ell \\\\)."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Opaque","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":566}],"output":{"Deduplicated":748}},"src":"TopLevel","is_global_initializer":null,"body":"Opaque"},{"def_id":28,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}],"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"source_text":"const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];","attr_info":{"attributes":[{"DocComment":" ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[],"output":{"Deduplicated":566}},"src":"TopLevel","is_global_initializer":1,"body":{"Structured":{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"bound_body_regions":0,"locals":{"arg_count":0,"locals":[{"index":0,"name":null,"span":{"data":{"file_id":7,"beg":{"line":108,"col":19},"end":{"line":108,"col":27}},"generated_from_span":null},"ty":{"Deduplicated":566}}]},"body":{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"statements":[{"span":{"data":{"file_id":7,"beg":{"line":108,"col":30},"end":{"line":111,"col":5}},"generated_from_span":null},"id":480,"kind":{"Assign":[{"kind":{"Local":0},"ty":{"Deduplicated":566}},{"Aggregate":[{"Array":[{"Deduplicated":336},{"kind":{"Literal":{"Scalar":{"Unsigned":["Usize","32"]}}},"ty":{"Deduplicated":565}}]},[{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","237"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","211"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","245"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","92"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","26"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","99"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","18"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","88"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","214"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","156"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","247"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","162"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","249"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","222"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","20"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","0"]}}},"ty":{"Deduplicated":336}}},{"Const":{"kind":{"Literal":{"Scalar":{"Unsigned":["U8","16"]}}},"ty":{"Deduplicated":336}}}]]}]},"comments_before":[]},{"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"id":481,"kind":"Return","comments_before":[]}]},"comments":[]}}}],"global_decls":[null,{"def_id":1,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Ident":["check_scalar",0]},{"Ident":["L_BYTES",0]}],"span":{"data":{"file_id":7,"beg":{"line":108,"col":4},"end":{"line":111,"col":6}},"generated_from_span":null},"source_text":"const L_BYTES: [u8; 32] = [\n 237, 211, 245, 92, 26, 99, 18, 88, 214, 156, 247, 162, 222, 249, 222,\n 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,\n ];","attr_info":{"attributes":[{"DocComment":" ℓ = 2^252 + 27742317777372353535851937790883648493, little-endian."}],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"ty":{"Deduplicated":566},"src":"TopLevel","global_kind":"NamedConst","value":{"kind":{"Call":[{"kind":{"Fun":{"Regular":28}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},[]]},"ty":{"Deduplicated":566}}}],"trait_decls":[{"def_id":0,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["From",0]}],"span":{"data":{"file_id":10,"beg":{"line":587,"col":0},"end":{"line":587,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to do value-to-value conversions while consuming the input value. It is the reciprocal of"},{"DocComment":" [`Into`]."},{"DocComment":""},{"DocComment":" One should always prefer implementing `From` over [`Into`]"},{"DocComment":" because implementing `From` automatically provides one with an implementation of [`Into`]"},{"DocComment":" thanks to the blanket implementation in the standard library."},{"DocComment":""},{"DocComment":" Only implement [`Into`] when targeting a version prior to Rust 1.41 and converting to a type"},{"DocComment":" outside the current crate."},{"DocComment":" `From` was not able to do these types of conversions in earlier versions because of Rust's"},{"DocComment":" orphaning rules."},{"DocComment":" See [`Into`] for more details."},{"DocComment":""},{"DocComment":" Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`Into`] can be used as well."},{"DocComment":""},{"DocComment":" The `From` trait is also very useful when performing error handling. When constructing a function"},{"DocComment":" that is capable of failing, the return type will generally be of the form `Result<T, E>`."},{"DocComment":" `From` simplifies error handling by allowing a function to return a single error type"},{"DocComment":" that encapsulates multiple error types. See the \"Examples\" section and [the book][book] for more"},{"DocComment":" details."},{"DocComment":""},{"DocComment":" **Note: This trait must not fail**. The `From` trait is intended for perfect conversions."},{"DocComment":" If the conversion can fail or is not perfect, use [`TryFrom`]."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - `From<T> for U` implies [`Into`]`<U> for T`"},{"DocComment":" - `From` is reflexive, which means that `From<T> for T` is implemented"},{"DocComment":""},{"DocComment":" # When to implement `From`"},{"DocComment":""},{"DocComment":" While there's no technical restrictions on which conversions can be done using"},{"DocComment":" a `From` implementation, the general expectation is that the conversions"},{"DocComment":" should typically be restricted as follows:"},{"DocComment":""},{"DocComment":" * The conversion is *infallible*: if the conversion can fail, use [`TryFrom`]"},{"DocComment":" instead; don't provide a `From` impl that panics."},{"DocComment":""},{"DocComment":" * The conversion is *lossless*: semantically, it should not lose or discard"},{"DocComment":" information. For example, `i32: From<u16>` exists, where the original"},{"DocComment":" value can be recovered using `u16: TryFrom<i32>`. And `String: From<&str>`"},{"DocComment":" exists, where you can get something equivalent to the original value via"},{"DocComment":" `Deref`. But `From` cannot be used to convert from `u32` to `u16`, since"},{"DocComment":" that cannot succeed in a lossless way. (There's some wiggle room here for"},{"DocComment":" information not considered semantically relevant. For example,"},{"DocComment":" `Box<[T]>: From<Vec<T>>` exists even though it might not preserve capacity,"},{"DocComment":" like how two vectors can be equal despite differing capacities.)"},{"DocComment":""},{"DocComment":" * The conversion is *value-preserving*: the conceptual kind and meaning of"},{"DocComment":" the resulting value is the same, even though the Rust type and technical"},{"DocComment":" representation might be different. For example `-1_i8 as u8` is *lossless*,"},{"DocComment":" since `as` casting back can recover the original value, but that conversion"},{"DocComment":" is *not* available via `From` because `-1` and `255` are different conceptual"},{"DocComment":" values (despite being identical bit patterns technically). But"},{"DocComment":" `f32: From<i16>` *is* available because `1_i16` and `1.0_f32` are conceptually"},{"DocComment":" the same real number (despite having very different bit patterns technically)."},{"DocComment":" `String: From<char>` is available because they're both *text*, but"},{"DocComment":" `String: From<u32>` is *not* available, since `1` (a number) and `\"1\"`"},{"DocComment":" (text) are too different. (Converting values to text is instead covered"},{"DocComment":" by the [`Display`](crate::fmt::Display) trait.)"},{"DocComment":""},{"DocComment":" * The conversion is *obvious*: it's the only reasonable conversion between"},{"DocComment":" the two types. Otherwise it's better to have it be a named method or"},{"DocComment":" constructor, like how [`str::as_bytes`] is a method and how integers have"},{"DocComment":" methods like [`u32::from_ne_bytes`], [`u32::from_le_bytes`], and"},{"DocComment":" [`u32::from_be_bytes`], none of which are `From` implementations. Whereas"},{"DocComment":" there's only one reasonable way to wrap an [`Ipv6Addr`](crate::net::Ipv6Addr)"},{"DocComment":" into an [`IpAddr`](crate::net::IpAddr), thus `IpAddr: From<Ipv6Addr>` exists."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" [`String`] implements `From<&str>`:"},{"DocComment":""},{"DocComment":" An explicit conversion from a `&str` to a String is done as follows:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let string = \"hello\".to_string();"},{"DocComment":" let other_string = String::from(\"hello\");"},{"DocComment":""},{"DocComment":" assert_eq!(string, other_string);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" While performing error handling it is often useful to implement `From` for your own error type."},{"DocComment":" By converting underlying error types to our own custom error type that encapsulates the"},{"DocComment":" underlying error type, we can return a single error type without losing information on the"},{"DocComment":" underlying cause. The '?' operator automatically converts the underlying error type to our"},{"DocComment":" custom error type with `From::from`."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" use std::fs;"},{"DocComment":" use std::io;"},{"DocComment":" use std::num;"},{"DocComment":""},{"DocComment":" enum CliError {"},{"DocComment":" IoError(io::Error),"},{"DocComment":" ParseError(num::ParseIntError),"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl From<io::Error> for CliError {"},{"DocComment":" fn from(error: io::Error) -> Self {"},{"DocComment":" CliError::IoError(error)"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl From<num::ParseIntError> for CliError {"},{"DocComment":" fn from(error: num::ParseIntError) -> Self {"},{"DocComment":" CliError::ParseError(error)"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" fn open_and_parse_file(file_name: &str) -> Result<i32, CliError> {"},{"DocComment":" let mut contents = fs::read_to_string(&file_name)?;"},{"DocComment":" let num: i32 = contents.trim().parse()?;"},{"DocComment":" Ok(num)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`String`]: ../../std/string/struct.String.html"},{"DocComment":" [`from`]: From::from"},{"DocComment":" [book]: ../../book/ch09-00-error-handling.html"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"From"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from","attr_info":{"attributes":[{"DocComment":" Converts to this type from the input type."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"item":{"id":15,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1409,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":1,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["TryFrom",0]}],"span":{"data":{"file_id":10,"beg":{"line":694,"col":0},"end":{"line":694,"col":33}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Simple and safe type conversions that may fail in a controlled"},{"DocComment":" way under some circumstances. It is the reciprocal of [`TryInto`]."},{"DocComment":""},{"DocComment":" This is useful when you are doing a type conversion that may"},{"DocComment":" trivially succeed but may also need special handling."},{"DocComment":" For example, there is no way to convert an [`i64`] into an [`i32`]"},{"DocComment":" using the [`From`] trait, because an [`i64`] may contain a value"},{"DocComment":" that an [`i32`] cannot represent and so the conversion would lose data."},{"DocComment":" This might be handled by truncating the [`i64`] to an [`i32`] or by"},{"DocComment":" simply returning [`i32::MAX`], or by some other method. The [`From`]"},{"DocComment":" trait is intended for perfect conversions, so the `TryFrom` trait"},{"DocComment":" informs the programmer when a type conversion could go bad and lets"},{"DocComment":" them decide how to handle it."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - `TryFrom<T> for U` implies [`TryInto`]`<U> for T`"},{"DocComment":" - [`try_from`] is reflexive, which means that `TryFrom<T> for T`"},{"DocComment":" is implemented and cannot fail -- the associated `Error` type for"},{"DocComment":" calling `T::try_from()` on a value of type `T` is [`Infallible`]."},{"DocComment":" When the [`!`] type is stabilized [`Infallible`] and [`!`] will be"},{"DocComment":" equivalent."},{"DocComment":""},{"DocComment":" Prefer using [`TryInto`] over [`TryFrom`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`TryInto`] can be used as well."},{"DocComment":""},{"DocComment":" `TryFrom<T>` can be implemented as follows:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" struct GreaterThanZero(i32);"},{"DocComment":""},{"DocComment":" impl TryFrom<i32> for GreaterThanZero {"},{"DocComment":" type Error = &'static str;"},{"DocComment":""},{"DocComment":" fn try_from(value: i32) -> Result<Self, Self::Error> {"},{"DocComment":" if value <= 0 {"},{"DocComment":" Err(\"GreaterThanZero only accepts values greater than zero!\")"},{"DocComment":" } else {"},{"DocComment":" Ok(GreaterThanZero(value))"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" As described, [`i32`] implements `TryFrom<`[`i64`]`>`:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let big_number = 1_000_000_000_000i64;"},{"DocComment":" // Silently truncates `big_number`, requires detecting"},{"DocComment":" // and handling the truncation after the fact."},{"DocComment":" let smaller_number = big_number as i32;"},{"DocComment":" assert_eq!(smaller_number, -727379968);"},{"DocComment":""},{"DocComment":" // Returns an error because `big_number` is too big to"},{"DocComment":" // fit in an `i32`."},{"DocComment":" let try_smaller_number = i32::try_from(big_number);"},{"DocComment":" assert!(try_smaller_number.is_err());"},{"DocComment":""},{"DocComment":" // Returns `Ok(3)`."},{"DocComment":" let try_successful_smaller_number = i32::try_from(3);"},{"DocComment":" assert!(try_successful_smaller_number.is_ok());"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`try_from`]: TryFrom::try_from"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"TryFrom"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"},{"index":2,"name":"Self_Error"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"try_from","attr_info":{"attributes":[{"DocComment":" Performs the conversion."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1405}},"item":{"id":18,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1410,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Try",0]}],"span":{"data":{"file_id":15,"beg":{"line":133,"col":0},"end":{"line":133,"col":41}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The `?` operator and `try {}` blocks."},{"DocComment":""},{"DocComment":" `try_*` methods typically involve a type implementing this trait. For"},{"DocComment":" example, the closures passed to [`Iterator::try_fold`] and"},{"DocComment":" [`Iterator::try_for_each`] must return such a type."},{"DocComment":""},{"DocComment":" `Try` types are typically those containing two or more categories of values,"},{"DocComment":" some subset of which are so commonly handled via early returns that it's"},{"DocComment":" worth providing a terse (but still visible) syntax to make that easy."},{"DocComment":""},{"DocComment":" This is most often seen for error handling with [`Result`] and [`Option`]."},{"DocComment":" The quintessential implementation of this trait is on [`ControlFlow`]."},{"DocComment":""},{"DocComment":" # Using `Try` in Generic Code"},{"DocComment":""},{"DocComment":" `Iterator::try_fold` was stabilized to call back in Rust 1.27, but"},{"DocComment":" this trait is much newer. To illustrate the various associated types and"},{"DocComment":" methods, let's implement our own version."},{"DocComment":""},{"DocComment":" As a reminder, an infallible version of a fold looks something like this:"},{"DocComment":" ```"},{"DocComment":" fn simple_fold<A, T>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> A,"},{"DocComment":" ) -> A {"},{"DocComment":" for x in iter {"},{"DocComment":" accum = f(accum, x);"},{"DocComment":" }"},{"DocComment":" accum"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" So instead of `f` returning just an `A`, we'll need it to return some other"},{"DocComment":" type that produces an `A` in the \"don't short circuit\" path. Conveniently,"},{"DocComment":" that's also the type we need to return from the function."},{"DocComment":""},{"DocComment":" Let's add a new generic parameter `R` for that type, and bound it to the"},{"DocComment":" output type that we want:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::Try;"},{"DocComment":" fn simple_try_fold_1<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" todo!()"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" If we get through the entire iterator, we need to wrap up the accumulator"},{"DocComment":" into the return type using [`Try::from_output`]:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::{ControlFlow, Try};"},{"DocComment":" fn simple_try_fold_2<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" let cf = f(accum, x).branch();"},{"DocComment":" match cf {"},{"DocComment":" ControlFlow::Continue(a) => accum = a,"},{"DocComment":" ControlFlow::Break(_) => todo!(),"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" We'll also need [`FromResidual::from_residual`] to turn the residual back"},{"DocComment":" into the original type. But because it's a supertrait of `Try`, we don't"},{"DocComment":" need to mention it in the bounds. All types which implement `Try` can be"},{"DocComment":" recreated from their corresponding residual, so we'll just call it:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::{ControlFlow, Try};"},{"DocComment":" pub fn simple_try_fold_3<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" let cf = f(accum, x).branch();"},{"DocComment":" match cf {"},{"DocComment":" ControlFlow::Continue(a) => accum = a,"},{"DocComment":" ControlFlow::Break(r) => return R::from_residual(r),"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" But this \"call `branch`, then `match` on it, and `return` if it was a"},{"DocComment":" `Break`\" is exactly what happens inside the `?` operator. So rather than"},{"DocComment":" do all this manually, we can just use `?` instead:"},{"DocComment":" ```"},{"DocComment":" # #![feature(try_trait_v2)]"},{"DocComment":" # use std::ops::Try;"},{"DocComment":" fn simple_try_fold<A, T, R: Try<Output = A>>("},{"DocComment":" iter: impl Iterator<Item = T>,"},{"DocComment":" mut accum: A,"},{"DocComment":" mut f: impl FnMut(A, T) -> R,"},{"DocComment":" ) -> R {"},{"DocComment":" for x in iter {"},{"DocComment":" accum = f(accum, x)?;"},{"DocComment":" }"},{"DocComment":" R::from_output(accum)"},{"DocComment":" }"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Try"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[{"clause_id":0,"span":{"data":{"file_id":15,"beg":{"line":133,"col":21},"end":{"line":133,"col":41}},"generated_from_span":null},"origin":"WhereClauseOnTrait","trait_":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"HashConsedValue":[1412,{"TraitType":[{"HashConsedValue":[1411,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}]},1,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"const_generics":[],"trait_refs":[]}}}},{"clause_id":1,"span":{"data":{"file_id":15,"beg":{"line":160,"col":19},"end":{"line":160,"col":41}},"generated_from_span":null},"origin":{"TraitItem":1},"trait_":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1412},{"HashConsedValue":[1413,{"TraitType":[{"Deduplicated":1411},0,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]},{"HashConsedValue":[1414,{"TraitType":[{"Deduplicated":1411},2,{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}]}]}],"const_generics":[],"trait_refs":[]}}}}],"consts":[],"types":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Output","attr_info":{"attributes":[{"DocComment":" The type of the value produced by `?` when *not* short-circuiting."}],"inline":null,"rename":null,"public":false},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Residual","attr_info":{"attributes":[{"DocComment":" The type of the value passed to [`FromResidual::from_residual`]"},{"DocComment":" as part of `?` when short-circuiting."},{"DocComment":""},{"DocComment":" This represents the possible values of the `Self` type which are *not*"},{"DocComment":" represented by the `Output` type."},{"DocComment":""},{"DocComment":" # Note to Implementors"},{"DocComment":""},{"DocComment":" The choice of this type is critical to interconversion."},{"DocComment":" Unlike the `Output` type, which will often be a raw generic type,"},{"DocComment":" this type is typically a newtype of some sort to \"color\" the type"},{"DocComment":" so that it's distinguishable from the residuals of other types."},{"DocComment":""},{"DocComment":" This is why `Result<T, E>::Residual` is not `E`, but `Result<Infallible, E>`."},{"DocComment":" That way it's distinct from `ControlFlow<E>::Residual`, for example,"},{"DocComment":" and thus `?` on `ControlFlow` cannot be used in a method returning `Result`."},{"DocComment":""},{"DocComment":" If you're making a generic type `Foo<T>` that implements `Try<Output = T>`,"},{"DocComment":" then typically you can use `Foo<std::convert::Infallible>` as its `Residual`"},{"DocComment":" type: that type will have a \"hole\" in the correct place, and will maintain the"},{"DocComment":" \"foo-ness\" of the residual so other types need to opt-in to interconversion."}],"inline":null,"rename":null,"public":false},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,1]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"Self_Clause1_TryType","attr_info":{"attributes":[],"inline":null,"rename":null,"public":true},"default":null,"implied_clauses":[]},"kind":{"TraitType":[2,2]}}],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from_output","attr_info":{"attributes":[{"DocComment":" Constructs the type from its `Output` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method"},{"DocComment":" such that applying the `?` operator will get back the original value:"},{"DocComment":" `Try::from_output(x).branch() --> ControlFlow::Continue(x)`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::Try;"},{"DocComment":""},{"DocComment":" assert_eq!(<Result<_, String> as Try>::from_output(3), Ok(3));"},{"DocComment":" assert_eq!(<Option<_> as Try>::from_output(4), Some(4));"},{"DocComment":" assert_eq!("},{"DocComment":" <std::ops::ControlFlow<String, _> as Try>::from_output(5),"},{"DocComment":" std::ops::ControlFlow::Continue(5),"},{"DocComment":" );"},{"DocComment":""},{"DocComment":" # fn make_question_mark_work() -> Option<()> {"},{"DocComment":" assert_eq!(Option::from_output(4)?, 4);"},{"DocComment":" # None }"},{"DocComment":" # make_question_mark_work();"},{"DocComment":""},{"DocComment":" // This is used, for example, on the accumulator in `try_fold`:"},{"DocComment":" let r = std::iter::empty().try_fold(4, |_, ()| -> Option<_> { unreachable!() });"},{"DocComment":" assert_eq!(r, Some(4));"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1413}],"output":{"Deduplicated":1394}},"item":{"id":21,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[{"Deduplicated":1411}]}}},"kind":{"TraitMethod":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"branch","attr_info":{"attributes":[{"DocComment":" Used in `?` to decide whether the operator should produce a value"},{"DocComment":" (because this returned [`ControlFlow::Continue`])"},{"DocComment":" or propagate a value back to the caller"},{"DocComment":" (because this returned [`ControlFlow::Break`])."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, Try};"},{"DocComment":""},{"DocComment":" assert_eq!(Ok::<_, String>(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(Err::<String, _>(3).branch(), ControlFlow::Break(Err(3)));"},{"DocComment":""},{"DocComment":" assert_eq!(Some(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!(None::<String>.branch(), ControlFlow::Break(None));"},{"DocComment":""},{"DocComment":" assert_eq!(ControlFlow::<String, _>::Continue(3).branch(), ControlFlow::Continue(3));"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::Break(3).branch(),"},{"DocComment":" ControlFlow::Break(ControlFlow::Break(3)),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"HashConsedValue":[1415,{"Adt":{"id":{"Adt":5},"generics":{"regions":[],"types":[{"Deduplicated":1412},{"Deduplicated":1413}],"const_generics":[],"trait_refs":[]}}}]}},"item":{"id":22,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[{"Deduplicated":1411}]}}},"kind":{"TraitMethod":[2,1]}}],"vtable":null},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["FromResidual",0]}],"span":{"data":{"file_id":15,"beg":{"line":310,"col":0},"end":{"line":310,"col":57}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Used to specify which residuals can be converted into which [`crate::ops::Try`] types."},{"DocComment":""},{"DocComment":" Every `Try` type needs to be recreatable from its own associated"},{"DocComment":" `Residual` type, but can also have additional `FromResidual` implementations"},{"DocComment":" to support interconversion with other `Try` types."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"FromResidual"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"R"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"from_residual","attr_info":{"attributes":[{"DocComment":" Constructs the type from a compatible `Residual` type."},{"DocComment":""},{"DocComment":" This should be implemented consistently with the `branch` method such"},{"DocComment":" that applying the `?` operator will get back an equivalent residual:"},{"DocComment":" `FromResidual::from_residual(r).branch() --> ControlFlow::Break(r)`."},{"DocComment":" (The residual is not mandated to be *identical* when interconversion is involved.)"},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" #![feature(try_trait_v2)]"},{"DocComment":" use std::ops::{ControlFlow, FromResidual};"},{"DocComment":""},{"DocComment":" assert_eq!(Result::<String, i64>::from_residual(Err(3_u8)), Err(3));"},{"DocComment":" assert_eq!(Option::<String>::from_residual(None), None);"},{"DocComment":" assert_eq!("},{"DocComment":" ControlFlow::<_, String>::from_residual(ControlFlow::Break(5)),"},{"DocComment":" ControlFlow::Break(5),"},{"DocComment":" );"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1395}],"output":{"Deduplicated":1394}},"item":{"id":23,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1416,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[3,0]}}],"vtable":null},{"def_id":4,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["try_trait",0]},{"Ident":["Residual",0]}],"span":{"data":{"file_id":15,"beg":{"line":364,"col":0},"end":{"line":364,"col":34}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" Allows retrieving the canonical type implementing [`Try`] that has this type"},{"DocComment":" as its residual and allows it to hold an `O` as its output."},{"DocComment":""},{"DocComment":" If you think of the `Try` trait as splitting a type into its [`Try::Output`]"},{"DocComment":" and [`Try::Residual`] components, this allows putting them back together."},{"DocComment":""},{"DocComment":" For example,"},{"DocComment":" `Result<T, E>: Try<Output = T, Residual = Result<Infallible, E>>`,"},{"DocComment":" and in the other direction,"},{"DocComment":" `<Result<Infallible, E> as Residual<T>>::TryType = Result<T, E>`."}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":null},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"O"},{"index":2,"name":"Self_TryType"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[{"regions":[],"skip_binder":{"trait_ref":{"HashConsedValue":[1418,{"kind":{"ParentClause":[{"HashConsedValue":[1417,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]},0]},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}]},"type_id":0,"ty":{"Deduplicated":1395}}},{"regions":[],"skip_binder":{"trait_ref":{"Deduplicated":1418},"type_id":1,"ty":{"Deduplicated":1394}}}]},"implied_clauses":[{"clause_id":0,"span":{"data":{"file_id":15,"beg":{"line":368,"col":18},"end":{"line":368,"col":58}},"generated_from_span":null},"origin":{"TraitItem":0},"trait_":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1404}],"const_generics":[],"trait_refs":[]}}}}],"consts":[],"types":[null],"methods":[],"vtable":null},{"def_id":5,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Ident":["Into",0]}],"span":{"data":{"file_id":10,"beg":{"line":450,"col":0},"end":{"line":450,"col":30}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" A value-to-value conversion that consumes the input value. The"},{"DocComment":" opposite of [`From`]."},{"DocComment":""},{"DocComment":" One should avoid implementing [`Into`] and implement [`From`] instead."},{"DocComment":" Implementing [`From`] automatically provides one with an implementation of [`Into`]"},{"DocComment":" thanks to the blanket implementation in the standard library."},{"DocComment":""},{"DocComment":" Prefer using [`Into`] over [`From`] when specifying trait bounds on a generic function"},{"DocComment":" to ensure that types that only implement [`Into`] can be used as well."},{"DocComment":""},{"DocComment":" **Note: This trait must not fail**. If the conversion can fail, use [`TryInto`]."},{"DocComment":""},{"DocComment":" # Generic Implementations"},{"DocComment":""},{"DocComment":" - [`From`]`<T> for U` implies `Into<U> for T`"},{"DocComment":" - [`Into`] is reflexive, which means that `Into<T> for T` is implemented"},{"DocComment":""},{"DocComment":" # Implementing [`Into`] for conversions to external types in old versions of Rust"},{"DocComment":""},{"DocComment":" Prior to Rust 1.41, if the destination type was not part of the current crate"},{"DocComment":" then you couldn't implement [`From`] directly."},{"DocComment":" For example, take this code:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" # #![allow(non_local_definitions)]"},{"DocComment":" struct Wrapper<T>(Vec<T>);"},{"DocComment":" impl<T> From<Wrapper<T>> for Vec<T> {"},{"DocComment":" fn from(w: Wrapper<T>) -> Vec<T> {"},{"DocComment":" w.0"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":" This will fail to compile in older versions of the language because Rust's orphaning rules"},{"DocComment":" used to be a little bit more strict. To bypass this, you could implement [`Into`] directly:"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" struct Wrapper<T>(Vec<T>);"},{"DocComment":" impl<T> Into<Vec<T>> for Wrapper<T> {"},{"DocComment":" fn into(self) -> Vec<T> {"},{"DocComment":" self.0"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" It is important to understand that [`Into`] does not provide a [`From`] implementation"},{"DocComment":" (as [`From`] does with [`Into`]). Therefore, you should always try to implement [`From`]"},{"DocComment":" and then fall back to [`Into`] if [`From`] can't be implemented."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" [`String`] implements [`Into`]`<`[`Vec`]`<`[`u8`]`>>`:"},{"DocComment":""},{"DocComment":" In order to express that we want a generic function to take all arguments that can be"},{"DocComment":" converted to a specified type `T`, we can use a trait bound of [`Into`]`<T>`."},{"DocComment":" For example: The function `is_hello` takes all arguments that can be converted into a"},{"DocComment":" [`Vec`]`<`[`u8`]`>`."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" fn is_hello<T: Into<Vec<u8>>>(s: T) {"},{"DocComment":" let bytes = b\"hello\".to_vec();"},{"DocComment":" assert_eq!(bytes, s.into());"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" let s = \"hello\".to_string();"},{"DocComment":" is_hello(s);"},{"DocComment":" ```"},{"DocComment":""},{"DocComment":" [`String`]: ../../std/string/struct.String.html"},{"DocComment":" [`Vec`]: ../../std/vec/struct.Vec.html"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"Into"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"into","attr_info":{"attributes":[{"DocComment":" Converts this type into the (usually inferred) input type."}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"item":{"id":24,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1419,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[5,0]}}],"vtable":null},{"def_id":6,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["ops",0]},{"Ident":["arith",0]},{"Ident":["Neg",0]}],"span":{"data":{"file_id":16,"beg":{"line":690,"col":0},"end":{"line":690,"col":19}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[{"DocComment":" The unary negation operator `-`."},{"DocComment":""},{"DocComment":" # Examples"},{"DocComment":""},{"DocComment":" An implementation of `Neg` for `Sign`, which allows the use of `-` to"},{"DocComment":" negate its value."},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" use std::ops::Neg;"},{"DocComment":""},{"DocComment":" #[derive(Debug, PartialEq)]"},{"DocComment":" enum Sign {"},{"DocComment":" Negative,"},{"DocComment":" Zero,"},{"DocComment":" Positive,"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" impl Neg for Sign {"},{"DocComment":" type Output = Self;"},{"DocComment":""},{"DocComment":" fn neg(self) -> Self::Output {"},{"DocComment":" match self {"},{"DocComment":" Sign::Negative => Sign::Positive,"},{"DocComment":" Sign::Zero => Sign::Zero,"},{"DocComment":" Sign::Positive => Sign::Negative,"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":" }"},{"DocComment":""},{"DocComment":" // A negative positive is a negative."},{"DocComment":" assert_eq!(-Sign::Positive, Sign::Negative);"},{"DocComment":" // A double negative is a positive."},{"DocComment":" assert_eq!(-Sign::Negative, Sign::Positive);"},{"DocComment":" // Zero is its own negation."},{"DocComment":" assert_eq!(-Sign::Zero, Sign::Zero);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"is_local":false,"opacity":"Foreign","lang_item":"neg"},"generics":{"regions":[],"types":[{"index":0,"name":"Self"},{"index":1,"name":"Self_Output"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_clauses":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"name":"neg","attr_info":{"attributes":[{"DocComment":" Performs the unary `-` operation."},{"DocComment":""},{"DocComment":" # Example"},{"DocComment":""},{"DocComment":" ```"},{"DocComment":" let x: i32 = 12;"},{"DocComment":" assert_eq!(-x, -12);"},{"DocComment":" ```"}],"inline":null,"rename":null,"public":true},"signature":{"is_unsafe":false,"abi":"Rust","inputs":[{"Deduplicated":1394}],"output":{"Deduplicated":1395}},"item":{"id":26,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1420,{"kind":"SelfId","trait_decl_ref":{"regions":[],"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"kind":{"TraitMethod":[6,0]}}],"vtable":{"id":{"Adt":11},"generics":{"regions":[],"types":[{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}],"trait_impls":[{"def_id":0,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["signature",0]},{"Impl":{"Trait":0}}],"span":{"data":{"file_id":7,"beg":{"line":209,"col":0},"end":{"line":215,"col":1}},"generated_from_span":null},"source_text":"impl TryFrom<&ed25519::Signature> for InternalSignature {\n type Error = SignatureError;\n\n fn try_from(sig: &ed25519::Signature) -> Result<InternalSignature, SignatureError> {\n InternalSignature::from_bytes(&sig.to_bytes())\n }\n}","attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"impl_trait":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":413},{"Deduplicated":1398},{"Deduplicated":379}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[{"index":0,"name":null,"mutability":"Unknown"}],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":2,"generics":{"regions":[{"Var":{"Free":0}}],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[1,0]}}],"vtable":null},{"def_id":1,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":1}}],"span":{"data":{"file_id":3,"beg":{"line":2167,"col":0},"end":{"line":2167,"col":42}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[{"HashConsedValue":[1402,{"kind":{"TraitImpl":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"HashConsedValue":[1400,{"kind":{"TraitImpl":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}]}]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1399},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}}}}]},{"HashConsedValue":[1403,{"kind":{"TraitImpl":{"id":7,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1401},{"Deduplicated":1394},{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1394},"implied_trait_refs":[]},"kind":{"TraitType":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1401},"implied_trait_refs":[]},"kind":{"TraitType":[2,1]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"value":{"Deduplicated":1399},"implied_trait_refs":[]},"kind":{"TraitType":[2,2]}}],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":14,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[2,0]}},{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[2,1]}}],"vtable":null},{"def_id":2,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":2}}],"span":{"data":{"file_id":3,"beg":{"line":2187,"col":0},"end":{"line":2188,"col":20}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":3,"generics":{"regions":[],"types":[{"Deduplicated":1405},{"Deduplicated":1401}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"},{"index":2,"name":"F"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":3,"beg":{"line":2187,"col":20},"end":{"line":2187,"col":35}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1404},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395},{"Deduplicated":1404}],"const_generics":[],"trait_refs":[{"Deduplicated":1406}]}},"kind":{"TraitMethod":[3,0]}}],"vtable":null},{"def_id":3,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":3}}],"span":{"data":{"file_id":10,"beg":{"line":785,"col":0},"end":{"line":785,"col":27}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":16,"generics":{"regions":[],"types":[{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":4,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["convert",0]},{"Impl":{"Trait":4}}],"span":{"data":{"file_id":10,"beg":{"line":767,"col":0},"end":{"line":769,"col":23}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":5,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"U"}],"const_generics":[],"trait_clauses":[{"clause_id":0,"span":{"data":{"file_id":10,"beg":{"line":769,"col":7},"end":{"line":769,"col":22}},"generated_from_span":null},"origin":"WhereClauseOnImpl","trait_":{"regions":[],"skip_binder":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":1395},{"Deduplicated":1394}],"const_generics":[],"trait_refs":[]}}}}],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[{"Deduplicated":1407}]}},"kind":{"TraitMethod":[5,0]}}],"vtable":null},{"def_id":5,"item_meta":{"name":[{"Ident":["ed25519_dalek",0]},{"Ident":["errors",0]},{"Impl":{"Trait":5}}],"span":{"data":{"file_id":13,"beg":{"line":109,"col":0},"end":{"line":119,"col":1}},"generated_from_span":null},"source_text":"impl From<InternalError> for SignatureError {\n #[cfg(not(feature = \"std\"))]\n fn from(_err: InternalError) -> SignatureError {\n SignatureError::new()\n }\n\n #[cfg(feature = \"std\")]\n fn from(err: InternalError) -> SignatureError {\n SignatureError::from_source(err)\n }\n}","attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":true,"opacity":"Transparent","lang_item":null},"impl_trait":{"id":0,"generics":{"regions":[],"types":[{"Deduplicated":379},{"Deduplicated":611}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":17,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[0,0]}}],"vtable":null},{"def_id":6,"item_meta":{"name":[{"Ident":["curve25519_dalek",0]},{"Ident":["edwards",0]},{"Impl":{"Trait":6}}],"span":{"data":{"file_id":11,"beg":{"line":701,"col":0},"end":{"line":701,"col":25}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Opaque","lang_item":null},"impl_trait":{"id":6,"generics":{"regions":[],"types":[{"Deduplicated":772},{"Deduplicated":772}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[],"consts":[],"types":[null],"methods":[{"params":{"regions":[],"types":[],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"skip_binder":{"id":9,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}},"kind":{"TraitMethod":[6,0]}}],"vtable":{"id":0,"generics":{"regions":[],"types":[],"const_generics":[],"trait_refs":[]}}},{"def_id":7,"item_meta":{"name":[{"Ident":["core",0]},{"Ident":["result",0]},{"Impl":{"Trait":7}}],"span":{"data":{"file_id":3,"beg":{"line":2210,"col":0},"end":{"line":2210,"col":68}},"generated_from_span":null},"source_text":null,"attr_info":{"attributes":[],"inline":null,"rename":null,"public":false},"is_local":false,"opacity":"Foreign","lang_item":null},"impl_trait":{"id":4,"generics":{"regions":[],"types":[{"Deduplicated":1401},{"Deduplicated":1394},{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}},"generics":{"regions":[],"types":[{"index":0,"name":"T"},{"index":1,"name":"E"}],"const_generics":[],"trait_clauses":[],"regions_outlive":[],"types_outlive":[],"trait_type_constraints":[]},"implied_trait_refs":[{"HashConsedValue":[1408,{"kind":{"TraitImpl":{"id":1,"generics":{"regions":[],"types":[{"Deduplicated":1394},{"Deduplicated":1395}],"const_generics":[],"trait_refs":[]}}},"trait_decl_ref":{"regions":[],"skip_binder":{"id":2,"generics":{"regions":[],"types":[{"Deduplicated":1399}],"const_generics":[],"trait_refs":[]}}}}]}],"consts":[],"types":[null],"methods":[],"vtable":null}],"ordered_decls":[{"TraitDecl":{"NonRec":0}},{"Fun":{"NonRec":15}},{"Fun":{"NonRec":6}},{"Fun":{"NonRec":16}},{"TraitImpl":{"NonRec":3}},{"Type":{"NonRec":6}},{"Type":{"NonRec":5}},{"Type":{"NonRec":2}},{"Fun":{"NonRec":3}},{"Fun":{"NonRec":5}},{"Type":{"NonRec":7}},{"Fun":{"NonRec":4}},{"Type":{"NonRec":10}},{"Fun":{"NonRec":11}},{"Fun":{"NonRec":9}},{"Type":{"NonRec":9}},{"Fun":{"NonRec":10}},{"Fun":{"NonRec":27}},{"Fun":{"NonRec":8}},{"Type":{"NonRec":1}},{"Fun":{"NonRec":12}},{"Type":{"NonRec":3}},{"Fun":{"NonRec":25}},{"Type":{"NonRec":8}},{"Fun":{"NonRec":17}},{"TraitImpl":{"NonRec":5}},{"Type":{"NonRec":4}},{"Fun":{"NonRec":19}},{"Fun":{"NonRec":28}},{"Global":{"NonRec":1}},{"Fun":{"NonRec":20}},{"Fun":{"NonRec":13}},{"Fun":{"NonRec":2}},{"Type":{"NonRec":0}},{"Fun":{"NonRec":7}},{"Fun":{"NonRec":1}},{"Fun":{"NonRec":0}}]},"has_errors":false} |