func ReadOpaqueKeyrings(r io.Reader) OpaqueKeyringChan { c := make(OpaqueKeyringChan) or := packet.NewOpaqueReader(r) go func() { defer close(c) var op *packet.OpaquePacket var err error var current *OpaqueKeyring for op, err = or.Next(); err == nil; op, err = or.Next() { switch op.Tag { case 6: //packet.PacketTypePublicKey: if current != nil { c <- current current = nil } current = &OpaqueKeyring{} current.setPosition(r) fallthrough case 2, 13, 14, 17: //packet.PacketTypeUserId, //packet.PacketTypeUserAttribute, //packet.PacketTypePublicSubKey, //packet.PacketTypeSignature current.Packets = append(current.Packets, op) } } if err == io.EOF && current != nil { c <- current } else if err != nil { if current == nil { current = &OpaqueKeyring{} } current.Error = errgo.Mask(err) c <- current } }() return c }
func (s *SamplePacketSuite) TestUatRtt(c *gc.C) { f := testing.MustInput("uat.asc") defer f.Close() block, err := armor.Decode(f) c.Assert(err, gc.IsNil) var p packet.Packet for { p, err = packet.Read(block.Body) if err != nil { c.Assert(err, gc.Equals, io.EOF) break } uat, ok := p.(*packet.UserAttribute) if ok { var buf bytes.Buffer uat.Serialize(&buf) or := packet.NewOpaqueReader(bytes.NewBuffer(buf.Bytes())) op, _ := or.Next() c.Assert(buf.Bytes()[3:], gc.DeepEquals, op.Contents) } } }
func newOpaquePacket(buf []byte) (*packet.OpaquePacket, error) { r := packet.NewOpaqueReader(bytes.NewBuffer(buf)) return r.Next() }