the present invention provides a detailed account of the system and methods to implement an optimal performance hardware solution to secure hash algorithm ( sha - 1 ) with minimal requirement of hardware resources . since the principles and theory of sha - 1 are well - known skills in the prior art , the related topics will not be discussed in details . persons skilled in the art can refer to fips pub 180 - 1 , the secure hash standard , for more detailed information on sha - 1 . in the pre - computation process of sha - 1 , a “ message ” ( or a stream of data ) of any length , preferably less than 264 bits , is first divided up into a plurality of “ message segments ” ( referred to as a “ message block ” in fips pub 180 - 1 ) of a specific length , such as a single 512 - bit . if necessary , the message is padded to make the total length a plurality of the specific length . the computation process of sha - 1 deals with a single 512 - bit message segment at a time . the shax is an implementation of this process without regard of the content of the 512 - bit message segment or the higher level protocol . fig1 , the architectural block diagram of sha - 1 computation logic core , depicts the aforementioned sha - 1 computation process and completes advantageously this process in 81 clock cycles . for the ease of illustration , the sha - 1 computation process will be divided into two stages to be explained in more detail . the first stage of sha - 1 computation includes 80 steps of computation , depicted as t = 0 ˜ 79 ( or t = 1 ˜ 80 ). in each of the steps , a set of logic and mathematical operations are performed on a plurality of data parameters . the data parameters are : a , b , c , d , e , wt , kt , and ft ( b , c , d ) and each of these data parameters will be described in more detail below . the sha - 1 registers ( 25 ) a , b , c , d , and e , such as 32 - bit synchronous registers , provide the data parameters for sha - 1 computation , and serve as the storage for the computation result of each step at the same time . in addition , the sha - 1 registers ( 25 ) and the message digest registers ( 28 ) are both initialized to the chaining variables — only prior to processing the first message segment — with hex values : a = 67452301 , b = efcdab89 , c = 98badcfe , d = 10325476 , e = c3d2e1f0 , a = 67452301 , b = efcdab89 , c = 98badcfe , d = 10325476 , and e = c3d2e1f0 . this is controlled by the init signal coming from ccu ( 30 ) as shown in fig2 . note that registers a , b , c , d , and e correspond to h 0 , h 1 , h 2 , h 3 , and h 4 as specified in the secure hash standard ( fips pub 180 - 1 ); and registers a , b , c , d , and e are equivalent to the a , b , c , d , and e of secure hash standard . hardware implementation of the sha - 1 registers and the message digest registers can be d - flip - flops ( dff ) with enable write controls and — depending on the bit value of the chaining variable bit position the dff represents — asynchronous set or clear inputs . however , the implementation is not limited to using the aforementioned dff , any other type of hardware that can perform the similar function can be implemented instead . in the first stage of the sha - 1 computation ( t = 0 to t = 79 or t = 1 to t = 80 ), the run signal ( coming from ccu as shown in fig2 ) enables writing to the sha - 1 registers for 80 clocks ; each of the computation steps is completed within one clock and the immediate result written into the sha - 1 registers . the kt is a 32 - bit constant and the ft ( b , c , d ) is a logical function of the values of registers b , c , and d . the 80 computation steps of sha - 1 are divided into four rounds of 20 steps each round as specified in the secure hash standard ; each round of the computation uses a different set of kt and ft ( b , c , d ) values . the kt and the ft ( b , c , d ) of each round is defined as follows : in implementation , a kt multiplexer ( 22 ) and a ft ( b , c , d ) multiplexer ( 23 ) are being used for selecting the appropriate kt and ft ( b , c , d ) parameters in a computation step of the first stage . selecting the appropriate round is controlled by a 7 - bit up - counter ( 291 ) and the codec ( 29 )— a decoder / encoder circuit . enabled by the run signal , the 7 - bit up - counter ( 291 ) counts the computation steps from t = 0 to t = 79 ( or t = 1 to t = 80 in fig1 ). the t 0 _signal coming from ccu ( 30 in fig2 ), resets the count at the end of each sha - 1 computation to zero . the codec ( 29 ) encodes the 7 - bit count of a computation step to a 2 - bit round signal that represents accurately the round the computation step belongs to ; and the round signal selects appropriate kt and ft ( b , c , d ) for a sha - 1 computation step through the kt multiplexer ( 22 ) and the ft ( b , c , d ) multiplexer ( 23 ). in addition , the codec ( 29 ) also outputs the lower four bits of the 7 - bit up - counter ( 291 ) as the ap signal to be used by the quad - channel output memory ( qcom , 10 ) in fig2 as the address pointer for wt ; and three additional signals : a signal — to be used by the wt multiplexer ( 21 )— representing t = 0 ˜ 15 ( or t = 1 ˜ 16 ), t = 16 ( or t = 17 ), and t = 79 ( or t = 80 ) are also decoded from the 7 - bit count . hardware of the ft ( b , c , d ) logic functions of all the four rounds can be implemented with simple logic gates . the four kt values for the four computation rounds can simply be “ hardwired ” values to go into the kt multiplexer ( 22 ) inputs . a 512 - bit message segment to be processed with sha - 1 is divided into sixteen 32 - bit words to be used in the computation . the wt is a 32 - bit data parameter from one of the sixteen 32 - bit words of the 512 - bit message segment buffer or a computation result of four of the stored 32 - bit words from the same circular queue buffer . from t = 0 to t = 15 ( or t = 1 to t = 16 ), wt is one of the sixteen 32 - bit words of the 512 - bit message segment undergoing sha - 1 computation . the 32 - bit word selected corresponds to the 32 - bit word in the qcom ( 10 in fig2 ) as pointed to by the address pointer signals ap from the codec ( 29 ). in other words , when t = 0 ( or t = 1 ), the first word ( w 0 ) in qcom is selected ; when t = 1 ( or t = 2 ), the second word ( w 1 ) is selected ; and so forth , till the last word ( sixteenth , w 15 ) is selected and used in the computation . from t = 16 to t = 79 ( or t = 17 to t = 80 ), wt is the result of a computation of four data parameters stored in qcom ( 10 in fig2 ): w t - 3 , w t - 8 , w t - 14 , and w t - 16 . it is the result of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ). the parameter wt is involved in 80 sequences of sha - 1 computation from t = 0 to t = 79 ( or t = 1 to t = 80 ). from the 17 th sequence ( t = 16 or t = 17 ) to the 80 th sequence ( t = 79 or t = 80 ), data of the 3 rd , the 8 th , the 14 th , and the 16 th previous sequences ( w t - 3 , w t - 8 , w t - 14 , and w t - 16 )— stored in the data buffer ( qcom , 10 in fig2 )— are retrieved to compute s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ); this result is then stored back to the memory location of the current wt sequence . the logic function of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) is implemented in two stages of an xor logic circuit ( 212 ) performing the ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) logic operations and a circular left shift device ( 211 ) to accomplish the s 1 operation . any type of logic gates or circuits that can accomplish the xor operations of four 32 - bit parameters can be used to implement the ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) function ( 212 ). the simplest way to implement the s 1 circular left shift device ( 211 ) is to connect bits 0 to 30 of the ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) output ( 212 ) to bits 1 to 31 of the output of the s 1 function ( 211 ), and connect bit 31 of the ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) output ( 212 ) to bit 0 of the output of the s 1 function ( 211 ). however , any other forms of implementation to accomplish the s 1 logical function asynchronously can be implemented instead . the present invention does not limit the implementation of any type of hardware that can accomplish the logic operations as specified . a logic and mathematical computation is described in detail . the following first stage logical and mathematical computations of sha - 1 ( t = 0 to t = 79 or t = 1 to t = 80 ) are performed ; on each step of the 80 - step computation : temp = s 5 ( a )+ ft ( b , c , d )+ e + wt + kt is performed with a summing circuit ( 24 ). e = d ( 275 ) d = c ( 274 ) c = s 30 ( b ) ( 273 ) b = a ( 272 ) a = temp ( 271 ) again , hardware implementations of the methods in this invention are not limited . the summing circuit can be implemented with adders or any other types of circuits that can perform the function of summing five 32 - bit parameters asynchronously . the s 5 ( a ) and s 30 ( b ) operations mentioned previously can be implemented with the same type of method as mentioned in the circular left shift one circuit ( 211 ). five multiplexers ( 271 ˜ 275 ) along with the summing circuit ( 24 ) and the previous mentioned methods of controlling selection of the wt ( 21 ), kt ( 22 ), and ft ( b , c , d ) ( 23 ) parameters performed all the first stage sha - 1 logical operations asynchronously ; output of the multiplexers ( 271 ˜ 275 ) are written into the sha - 1 registers ( 25 ) synchronously from t = 0 to t = 79 ( or t = 1 to t = 80 ); and this is how the first stage sha - 1 computation — from t = 0 to t = 79 ( or t = 1 to t = 80 )— can complete in exactly 80 clock cycles . the second stage of sha - 1 computation is the 81 st step ( and the final step ) of the computation ( t = 80 or t = 81 ). in this stage , the values of the sha - 1 registers ( 25 )— which are the computation results of the first stage sha - 1 computation ( t = 0 to t = 79 or t = 1 to t = 80 )— are added to the values of the message digest registers ( 28 )— which are the sha - 1 hash result of the previous message segment or chaining variables if the current message segment is the first message segment of a message ; then the result is stored back into both the sha - 1 registers ( 25 ) and the message digest registers ( 28 ) to finish the 81 st step computation . the entire sha - 1 computation on a message segment is complete after the 81 st step , the resulting 160 - bit hash value stored in both the sha - 1 registers ( 25 ) and the message digest registers ( 28 ) is ready to be used for the sha - 1 computation of the next message segment ; or if the current message segment processed is the last message segment of a message , then the 160 - bit hash result would be the final “ message digest ” of a message ; this 160 - bit value is available to external systems through the message digest registers ( 28 ) output ports . each of the computations can be implemented with 32 - bit adder circuits or any type of circuit that can accomplish adding two 32 - bit values asynchronously . when t = 80 ( or t = 81 ) as signaled by the endop ( 292 ) register , both the message digest registers ( 28 ) and the sha - 1 registers ( 25 ) are enabled for storing the input values ; the results of ( a + a ), ( b + b ), ( c + c ), ( d + d ), and ( e + e ) are stored into the message digest registers ( 28 ) and stored into the sha - 1 registers ( 25 ) through the five multiplexers ( 271275 ). all the above actions complete in the 81 st clock cycle of the sha - 1 computation ; thus , the entire sha - 1 computation of a 512 - bit message segment can complete in exactly 81 clock cycles . fig2 is a block diagram showing the top level architecture of the secure hash algorithm accelerator ( shax ) in accordance with the present invention . the central control unit ( ccu , 30 ) is the main controller of all the other major units and the interface to external systems . the following functions are performed by the ccu ( 30 ): the following ccu signals are directly related to the control of sha - 1 computation , and will be described in more detail . 1 . the run signal coupled to the sha - 1 logical core ( 20 ) enables performing the first stage sha - 1 computation ( t = 0 to t = 79 or t = 1 to t = 80 ). the run signal is preferably generated with a finite state machine ( fsm ) and decoding logics internal to the ccu ( 30 ). the run signal is started by a command or a control signal from an external system , and cleared by the t 79 ( t = 79 or t = 80 ) signal coming out of the sha - 1 logic core ( 20 ) when the first stage computation finishes . the second stage sha - 1 computation ( t = 80 or t = 81 ) is finished automatically within the sha - 1 logic core ( 20 ) without external control signals : 2 . the init signal coupled to the sha - 1 logic core ( 20 ) initializes the message digest registers ( 28 in fig1 ) and the sha - 1 registers ( 25 in fig1 ) with the values of the chaining variables . the init signal is active when shax is reset by an external command or a reset signal ; it is also active when all five of the message digest registers ( 28 in fig1 ) have been read by an external system ( if the external system have retrieved the message digest then all message segments must have been processed ). 3 . the t 0 _signal coupled to the sha - 1 logic core ( 20 ) clears the 7 - bit up - counter ( 291 in fig1 ) at the end of each first stage sha - 1 computation ( t = 0 to t = 79 or t = 1 to t = 80 ) and at anytime the system is in reset . 4 . the din_sel and the a_sel signals coming out of the ccu ( 30 ) control the input data path multiplexer ( 42 ) and the address multiplexer ( 41 ). when shax is not performing sha - 1 computation , the two multiplexers ( 41 , 42 ) direct the external input data and the external address into the qcom ( 10 ) to allow external systems to load the qcom ( 10 ) with a 512 - bit message segment . during the sha - 1 computation , the internal data parameter wt and the address pointer ap from the sha - 1 logic core ( 20 ) are directed to the qcom ( 10 ) instead . 5 . the signal t 16 indicates the sha - 1 logic core ( 20 ) is performing the 17 th computation step ( t = 16 or t = 17 ). the signal causes the ccu ( 30 ) to activate the w_mem signal which enables writing the wt data parameter from the sha - 1 logic core ( 20 ) into the qcom ( 10 ) at the address pointed to by ap . the w_mem signal is activated from t = 16 to t = 79 ( or t = 17 to t = 80 ), value of wt during this time is the result of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ). the quad - channel output memory ( qcom , 10 ) is preferably a 16 × 3 2 - bit circular queue memory buffer functioning as both the 512 - bit message segment storage and the computation buffer for the wt data parameter for t = 16 to t = 79 ( or t = 17 to t = 80 ). from t = 0 to t = 15 ( or t = 1 to t = 16 ), the 16 × 32 - bit message segment stored in qcom ( 10 ) is used directly by the sha - 1 logic core ( 20 ) for computation without modification . from t = 16 to t = 79 ( or t = 17 to t = 80 ), however , the result of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) must be stored back into the memory in each step . since the qcom ( 10 ) is a 16 - word circular queue memory , the address pointer would circle back to zero for every sixteen sequences . for t = 16 ( or t = 17 ), the result of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) would be stored in memory word location 0 ( w 0 ); for t = 17 ( t = 18 ), the result of s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) stored in w 1 ; and so forth . the concept of this operation is illustrated in fig5 . qcom ( 10 ) also has four output data channels to supply sha - 1 logic core ( 20 ) with all four of the w t - 3 , w t - 8 , w t - 14 , and w t - 16 parameters for the computation during t = 16 to t = 79 ( or t = 17 to t = 80 ); this allows the s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) computed in the same clock cycle , thus , accomplishing the optimal sha - 1 computation performance of 81 clock cycles . since w t - 6 is equivalent to w t - 0 , this channel also supplies wt to the sha - 1 logic core ( 20 ) for t = 0 to t = 15 ( or t = 1 to t = 16 ). details of the qcom ( 10 ) design is illustrated in fig3 . fig3 is the quad - channel output memory ( qcom ) architecture block diagram . the 16 × 32 - bit memory array ( 15 ) is a storage unit with sixteen 32 - bit words . the address decoder ( 151 ) decodes the 4 - bit address lines ( a ) and the write enable signal ( w ) to make sixteen word - line - write signals for enabling the memory location pointed by the address lines for writing data into . the outputs of the sixteen memory words driving four 16 - word input multiplexers ( 11 , 12 , 13 , and 14 ). selecting w t - 3 is accomplished with implementing a 4 - bit adder ( 111 ) adding 13 to the value of a ( the address ), and the output driving the select lines of the wt — 3 channel multiplexer ( 11 ). selecting w t - 8 is accomplished with implementing a 4 - bit adder ( 112 ) adding 8 to the value of a ( the address ), and the output driving the select lines of the wt — 8 channel multiplexer ( 12 ). selecting w t - 14 is accomplished with implementing a 4 - bit adder ( 113 ) adding 2 to the value of a ( the address ), and the output driving the select lines of the wt — 14 channel multiplexer ( 13 ). the select lines of the wt — 16 channel multiplexer ( 14 ) are driven directly by the address lines ( a ) since w t - 16 is the same as w t - 0 for the 16 - word circular queue memory . the wt — 16 channel multiplexer ( 14 ) is also driving two 32 - bit output ports : wt — 16 and dout . the dout port is used by the sha - 1 logic core ( 20 in fig2 ) during t = 0 to t = 15 ( t = 1 to t = 16 ). using three 4 - bit adders to dynamically calculate the address pointers of w t - 3 , w t - 8 , and w t - 14 ; and using four 16 - word multiplexers to simultaneously supply all four of the w t - 3 , w t - 8 , w t - 14 , and w t - 16 parameters to the sha - 1 logic core ( 20 in fig2 ), allow the computation core ( fig1 ) to include s 1 ( w t - 3 xor w t - 8 xor w t - 14 xor w t - 16 ) with the other data parameters to perform all of the asynchronous logic and mathematical operations in a first stage sha - 1 computation step in just one clock cycle ; thus , a complete sha - 1 computation on a 512 - bit message segment only takes 81 clock cycles . fig4 shows an alternative implementation of the sha - 1 logic core ( 20 in fig2 ). the differences between fig4 and fig1 are : 1 . the sha - 1 registers ( 251 ) has no write enable feature . 2 . a set of five multiplexers ( 261 ˜ 265 ) are added to the implementation . the logic and mathematical functionalities of the sha - 1 logic cores shown in fig4 and fig1 are identical . the implementation of fig4 is an alternative method when the hardware for implementing the sha - 1 registers with the write enable feature ( 25 in fig1 ) is not readily available , then using the five additional multiplexers ( 261 - 265 ) to enable storing the first stage computation results ( t = 0 to t = 79 or t = 1 to t = 80 ) into the sha - 1 registers ( 251 )— using the run signal — are the better method . in conclusion , the quand - channel output memory ( qcom ) solved the issue of retrieving simultaneously the w t - 3 , w t - 8 , w t - 14 , and w t - 16 data parameters ; combined this feature with the asynchronous computation circuits and the sequence control mechanisms previously described in the sha - 1 logic core , a sha - 1 computation on a 512 - bit message segment can finish in only 81 clock cycles . from looking at the architecture of the present invention , it is clear how the simplicity and the robustness of the design can lead to a very compact hardware implementation requiring minimal circuit materials . as is understood by a person skilled in the art , the foregoing preferred embodiments of the present invention are illustrative rather than limiting of the present invention . it is intended that they cover various modifications and similar arrangements be included within the spirit and scope of the appended claims , the scope of which should be accorded the broadest interpretation so as to encompass all such modifications and similar structure .