import "crypto/cipher"

低レベルのブロック暗号をラップする標準的ブロック暗号モードを実装しています。http://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html、およびNIST Special Publication 800-38Aを参照してください。

パッケージファイル

cbc.go cfb.go cipher.go ctr.go io.go ocfb.go

NewCBCDecrypter関数

func NewCBCDecrypter(b Block, iv []byte) *cbcDecrypter

NewCBCDecrypterは、指定したBlockを使い、暗号ブロック連鎖モードで復号化を行うBlockModeを返します。ivの長さは、Blockのブロックサイズと同じで、このデータの暗号化に使用したivとも一致していなければなりません。

Block型

Blockは、指定したキーを使うブロック暗号化の実装を表します。これは、各ブロックを暗号化もしくは復号化する機能を提供します。BlockModeでは、その機能を拡張しブロックのストリームにまで対応しています。

type Block interface {
    // BlockSizeは、暗号のブロックサイズを返します。
    BlockSize() int

    // Encryptは、src内の最初のブロックをdstへ暗号化します。
    // dstとsrcには、同じメモリを指し示せます。
    Encrypt(dst, src []byte)

    // Decryptは、srcの最初のブロックをdstへ復号化します。
    // dstとsrcには、同じメモリを指し示せます。
    Decrypt(dst, src []byte)
}

BlockMode型

BlockModeは、ブロックベースモードで実行されるブロック暗号(CBC、ECB等)を表します。

type BlockMode interface {
    // BlockSizeは、modeのブロックサイズを返します。
    BlockSize() int

    // CryptBlocksは、複数のブロックの暗号化または復号化を行います。
    // srcの長さは、ブロックサイズの倍数でなければなりません。
    // dstとsrcには、同じメモリを指し示せます。
    CryptBlocks(dst, src []byte)
}

NewCBCEncrypter関数

func NewCBCEncrypter(b Block, iv []byte) BlockMode

NewCBCEncrypterは、指定したBlockを使い、暗号ブロック連鎖モードで暗号化を行うBlockModeを返します。ivの長さは、Blockのブロックサイズと同じでなければなりません。

Stream型

Streamは、ストリーム暗号を表します。

type Stream interface {
    // XORKeyStreamは、与えたスライスと、暗号のキーストリームから得られる
    // 各バイトをXORします。dstとsrcには、同じメモリを指し示せます。
    XORKeyStream(dst, src []byte)
}

NewCFBDecrypter関数

func NewCFBDecrypter(block Block, iv []byte) Stream

NewCFBDecrypterは、指定されたブロックを使い、暗号フィードバクモードで復号化を行うStreamを返します。ivの長さは、Blockのブロックサイズと同じでなければなりません。

NewCFBEncrypter関数

func NewCFBEncrypter(block Block, iv []byte) Stream

NewCFBEncrypterは、指定されたブロックを使い、暗号フィードバクモードで暗号化を行うStreamを返します。ivの長さは、Blockのブロックサイズと同じでなければなりません。

NewCTR関数

func NewCTR(block Block, iv []byte) Stream

NewCTRは、指定されたブロックを使い、カウンターモードで暗号化/復号化を行うStreamを返します。ivの長さは、Blockのブロックサイズと同じでなければなりません。

NewOCFBDecrypter関数

func NewOCFBDecrypter(block Block, prefix []byte) Stream

NewOCFBDecrypterは、指定されたブロックを使い、OpenPGPの暗号フィードバックモードでデータの復号化を行うStreamを返します。blockSizeがBlockのブロックサイズであるとき、prefixは暗号文の最初のブロックサイズ+2バイトでなければなりません。正しくないキーが検出されると、nillが返されます。

NewOCFBEncrypter関数

func NewOCFBEncrypter(block Block, randData []byte) (Stream, []byte)

NewOCFBEncrypterは、指定されたブロックを使い、OpenPGPの暗号フィードバックモードでデータの暗号化を行うStreamと最初の暗号文を返します。randDataは、ランダムなバイトで、Blockのブロックサイズと同じ長さでなければなりません。

StreamReader型

StreamReaderは、Streamをio.Readerでラップします。これを通過する各データ(のスライス)を処理するために、単純にXORKeyStreamを呼び出しています。

type StreamReader struct {
    S Stream
    R io.Reader
}

(StreamReader) Read関数

func (r StreamReader) Read(dst []byte) (n int, err os.Error)

StreamWriter型

StreamWriterは、Streamをo.Writerでラップします。これを通過する各データ(のスライス)を処理するために、単純にXORKeyStreamを呼び出しています。Writeの呼び出しで、返された長さが不足しているときは、このStreamWriterは同期が取れていないので、破棄すべきです。

type StreamWriter struct {
    S   Stream
    W   io.Writer
    Err os.Error
}

(StreamWriter) Close関数

func (w StreamWriter) Close() os.Error

(StreamWriter) Write関数

func (w StreamWriter) Write(src []byte) (n int, err os.Error)