servlib/security/Ciphersuite_BA1.h
changeset 0 2b3e5ec03512
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlib/security/Ciphersuite_BA1.h	Thu Apr 21 14:57:45 2011 +0100
@@ -0,0 +1,130 @@
+/*
+ *    Copyright 2006 SPARTA Inc
+ * 
+ *    Licensed under the Apache License, Version 2.0 (the "License");
+ *    you may not use this file except in compliance with the License.
+ *    You may obtain a copy of the License at
+ * 
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ *    Unless required by applicable law or agreed to in writing, software
+ *    distributed under the License is distributed on an "AS IS" BASIS,
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *    See the License for the specific language governing permissions and
+ *    limitations under the License.
+ */
+
+#ifndef _CIPHERSUITE_BA1_H_
+#define _CIPHERSUITE_BA1_H_
+
+#ifdef BSP_ENABLED
+
+#include "bundling/BlockProcessor.h"
+#include "BA_BlockProcessor.h"
+
+namespace dtn {
+
+/**
+ * Block processor implementation for the bundle authentication block.
+ */
+class Ciphersuite_BA1 : public Ciphersuite {
+public:
+    /// Constructor
+    Ciphersuite_BA1();
+    
+    virtual u_int16_t   cs_num();
+
+    virtual size_t      result_len() { return res_len; }
+    
+    /// @{ Virtual from BlockProcessor
+    /**
+     * First callback for parsing blocks that is expected to append a
+     * chunk of the given data to the given block. When the block is
+     * completely received, this should also parse the block into any
+     * fields in the bundle class.
+     *
+     * The base class implementation parses the block preamble fields
+     * to find the length of the block and copies the preamble and the
+     * data in the block's contents buffer.
+     *
+     * This and all derived implementations must be able to handle a
+     * block that is received in chunks, including cases where the
+     * preamble is split into multiple chunks.
+     *
+     * @return the amount of data consumed or -1 on error
+     */
+    virtual int consume(Bundle* bundle, BlockInfo* block,
+                        u_char* buf, size_t len);
+
+    /**
+     * Validate the block. This is called after all blocks in the
+     * bundle have been fully received.
+     *
+     * @return true if the block passes validation
+     */
+    virtual bool validate(const Bundle*           bundle,
+                          BlockInfoVec*           block_list,
+                          BlockInfo*              block,
+                          status_report_reason_t* reception_reason,
+                          status_report_reason_t* deletion_reason);
+
+    /**
+     * First callback to generate blocks for the output pass. The
+     * function is expected to initialize an appropriate BlockInfo
+     * structure in the given BlockInfoVec.
+     *
+     * The base class simply initializes an empty BlockInfo with the
+     * appropriate owner_ pointer.
+     */
+    virtual int prepare(const Bundle*    bundle,
+                        BlockInfoVec*    xmit_blocks,
+                        const BlockInfo* source,
+                        const LinkRef&   link,
+                        BlockInfo::list_owner_t list);
+    
+    /**
+     * Second callback for transmitting a bundle. This pass should
+     * generate any data for the block that does not depend on other
+     * blocks' contents.  It MUST add any EID references it needs by
+     * calling block->add_eid(), then call generate_preamble(), which
+     * will add the EIDs to the primary block's dictionary and write
+     * their offsets to this block's preamble.
+     */
+    virtual int generate(const Bundle* 	bundle,
+                         BlockInfoVec*     xmit_blocks,
+                         BlockInfo*    	block,
+                         const LinkRef&	link,
+                         bool          	last);
+    
+    /**
+     * Third callback for transmitting a bundle. This pass should
+     * generate any data (such as security signatures) for the block
+     * that may depend on other blocks' contents.
+     *
+     * The base class implementation does nothing. 
+     */
+    virtual int finalize(const Bundle*  bundle, 
+                         BlockInfoVec*  xmit_blocks, 
+                         BlockInfo*     block, 
+                         const LinkRef& link);
+
+    static void digest(const Bundle*    bundle,
+                       const BlockInfo* caller_block,
+                       const BlockInfo* target_block,
+                       const void*      buf,
+                       size_t           len,
+                       OpaqueContext*   r);
+    
+    /**
+     * Defined size, in bytes, for security result.
+     * For SHA-1 this is 20 bytes (160 bits)
+     */
+    enum { res_len = 20, CSNUM_BA1 = 1 };      
+    /// @}
+};
+
+} // namespace dtn
+
+#endif /* BSP_ENABLED */
+
+#endif /* _CIPHERSUITE_BA1_H_ */