src/pkg/crypto/aes/cipher.go - The Go Programming Language

Golang

Source file src/pkg/crypto/aes/cipher.go

     1	// Copyright 2009 The Go Authors. All rights reserved.
     2	// Use of this source code is governed by a BSD-style
     3	// license that can be found in the LICENSE file.
     4	
     5	package aes
     6	
     7	import (
     8		"crypto/cipher"
     9		"strconv"
    10	)
    11	
    12	// The AES block size in bytes.
    13	const BlockSize = 16
    14	
    15	// A cipher is an instance of AES encryption using a particular key.
    16	type aesCipher struct {
    17		enc []uint32
    18		dec []uint32
    19	}
    20	
    21	type KeySizeError int
    22	
    23	func (k KeySizeError) Error() string {
    24		return "crypto/aes: invalid key size " + strconv.Itoa(int(k))
    25	}
    26	
    27	// NewCipher creates and returns a new cipher.Block.
    28	// The key argument should be the AES key,
    29	// either 16, 24, or 32 bytes to select
    30	// AES-128, AES-192, or AES-256.
    31	func NewCipher(key []byte) (cipher.Block, error) {
    32		k := len(key)
    33		switch k {
    34		default:
    35			return nil, KeySizeError(k)
    36		case 16, 24, 32:
    37			break
    38		}
    39	
    40		n := k + 28
    41		c := &aesCipher{make([]uint32, n), make([]uint32, n)}
    42		expandKey(key, c.enc, c.dec)
    43		return c, nil
    44	}
    45	
    46	func (c *aesCipher) BlockSize() int { return BlockSize }
    47	
    48	func (c *aesCipher) Encrypt(dst, src []byte) { encryptBlock(c.enc, dst, src) }
    49	
    50	func (c *aesCipher) Decrypt(dst, src []byte) { decryptBlock(c.dec, dst, src) }