     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35

    use crypto::hmac::Hmac as rcHmac;
    use crypto::mac::Mac;
    use crypto::sha2::Sha256;
    use mac::MacAlgorithm;

    pub struct Hmac {
        hmac: Box<rcHmac<Sha256>>,
    }

    impl Hmac {
        pub fn new(key: &[u8]) -> Hmac {
            let digest = Sha256::new();
            Hmac { hmac: Box::new(rcHmac::new(digest, key)) }
        }
    }

    impl MacAlgorithm for Hmac {
        fn size(&self) -> usize {
            32
        }

        fn sign(&mut self, data: &[u8], seq: u32, buf: &mut [u8]) {
            let sequence = &[
                ((seq & 0xff000000) >> 24) as u8,
                ((seq & 0x00ff0000) >> 16) as u8,
                ((seq & 0x0000ff00) >> 8) as u8,
                ((seq & 0x000000ff)) as u8,
            ];

            self.hmac.input(sequence);
            self.hmac.input(data);
            self.hmac.raw_result(buf);
            self.hmac.reset();
        }
    }

# Help

## Keyboard Shortcuts

?
  Show this help dialog
S
  Focus the search field
⇤
  Move up in search results
⇥
  Move down in search results
⏎
  Go to active search result
+
  Collapse/expand all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g. `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g. `vec -> usize` or `* -> vec`)