stream

package module
v0.0.0-...-8abec57 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 22, 2022 License: MIT Imports: 4 Imported by: 1

README

go-aead-iostream

IO stream for go std AEAD

Conn example

https://github.com/c0mm4nd/go-aead-conn

Example

import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
	"crypto/sha256"
	"io"
	"os"
	"log"

	stream "github.com/c0mm4nd/go-aead-iostream"
)

func main() {
    seed := hash([]byte("Hello"))

	c1, err := aes.NewCipher(seed)
	if err != nil {
		panic(err)
	}
	c2, err := aes.NewCipher(seed)
	if err != nil {
		panic(err)
	}

	aead1, err := cipher.NewGCM(c1)
	if err != nil {
		panic(err)
	}
	aead2, err := cipher.NewGCM(c2)
	if err != nil {
		panic(err)
	}

	f1, err := os.OpenFile("test", os.O_CREATE|os.O_WRONLY, 644)
	if err != nil {
		panic(err)
	}

	f2, err := os.Open("test")
	if err != nil {
		panic(err)
	}

	var chunkSize = 64

	w := stream.NewStreamWriteCloser(seed, chunkSize, f1, aead2)

	rawMessage := []byte("Package cipher implements standard block cipher modes that can be wrapped around low-level block cipher implementations. See https://csrc.nist.gov/groups/ST/toolkit/BCM/current_modes.html and NIST Special Publication 800-38A.")

	w.Write(rawMessage)
	w.Close()

	r := stream.NewStreamReader(seed, chunkSize, f2, aead1)

	buf := make([]byte, 2048)
	dst := make([]byte, 0)
	for {
		n, err := r.Read(buf)
		if n > 0 {
			dst = append(dst, buf[:n]...)
		}
		if err != nil && err != io.EOF {
			panic(err)
		}
		if err == io.EOF {
			break
		}

	}

	if !bytes.Equal(dst, rawMessage) {
		log.Error("dst is %s, but raw is %s", dst, rawMessage)
	} else {
		log.Println("pass")
	}

	f2.Close()
	os.Remove("test")
}


Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type StreamReader

type StreamReader struct {
	// contains filtered or unexported fields
}

func NewStreamReader

func NewStreamReader(seed []byte, chunkSize int, backend io.Reader, aead cipher.AEAD) *StreamReader

func (*StreamReader) Read

func (r *StreamReader) Read(dst []byte) (n int, err error)

func (*StreamReader) ReadByte

func (r *StreamReader) ReadByte() (b byte, err error)

type StreamWriteCloser

type StreamWriteCloser struct {
	// contains filtered or unexported fields
}

func NewStreamWriteCloser

func NewStreamWriteCloser(seed []byte, chunkSize int, backend io.WriteCloser, aead cipher.AEAD) *StreamWriteCloser

func (*StreamWriteCloser) Close

func (w *StreamWriteCloser) Close() (err error)

func (*StreamWriteCloser) Write

func (w *StreamWriteCloser) Write(src []byte) (n int, err error)

func (*StreamWriteCloser) WriteByte

func (w *StreamWriteCloser) WriteByte(c byte) (err error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL