- MySQL :: MySQL 8.0 Reference Manual :: 11.8 Data Type
- DB2 10 - Application programming and SQL - LOB host
- 14-Bit ITU National Point Code Formats - Oracle
- Powers of 2 Table - - - - - - Vaughn's Summaries
- CD4060B Binary Counter IC Pinout, Datasheet, Equivalent

Hi all,

The following is a BIP-formatted design spec for compact block relay

designed to limit on wire bytes during block relay. You can find the

latest version of this document at

https://github.com/TheBlueMatt/bips/blob/mastebip-TODO.mediawiki.

There are several TODO items left on the document as indicated.

Additionally, the implementation linked at the bottom of the document

has a few remaining TODO items as well:

- Only request compact-block-announcement from one or two peers at a

- Request new blocks using MSG_CMPCT_BLOCK where appropriate.
- Fill prefilledtxn with more than just the coinbase, as noted by the

Luke (CC'd): Can you assign a BIP number?

Thanks,

Matt

BIP: TODO

Title: Compact block relay

Author: Matt Corallo

Status: Draft

Type: Standards Track

Created: 2016-04-27

==Abstract==

Compact blocks on the wire as a way to save bandwidth for nodes on the

P2P network.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",

"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this

document are to be interpreted as described in RFC 2119.

==Motivation==

Historically, the Bitcoin P2P protocol has not been very bandwidth

efficient for block relay. Every transaction in a block is included when

relayed, even though a large number of the transactions in a given block

are already available to nodes before the block is relayed. This causes

moderate inbound bandwidth spikes for nodes when receiving blocks, but

can cause very significant outbound bandwidth spikes for some nodes

which receive a block before their peers. When such spikes occur, buffer

bloat can make consumer-grade internet connections temporarily unusable,

and can delay the relay of blocks to remote peers who may choose to wait

instead of redundantly requesting the same block from other, less

congested, peers.

Thus, decreasing the bandwidth used during block relay is very useful

for many individuals running nodes.

While the goal of this work is explicitly not to reduce block transfer

latency, it does, as a side effect reduce block transfer latencies in

some rather significant ways. Additionally, this work forms a foundation

for future work explicitly targeting low-latency block transfer.

==Specification==

===Intended Protocol Flow===

TODO: Diagrams

The protocol is intended to be used in two ways, depending on the peers

and bandwidth available, as discussed [[#Implementation_Details|later]].

The "high-bandwidth" mode, which nodes may only enable for a few of

their peers, is enabled by setting the first boolean to 1 in a

"sendcmpct" message. In this mode, peers send new block announcements

with the short transaction IDs already, possibly even before fully

validating the block. In some cases no further round-trip is needed, and

the receiver can reconstruct the block and process it as usual

immediately. When some transactions were not available from local

sources (ie mempool), a getblocktxn/blocktxn roundtrip is neccessary,

bringing the best-case latency to the same 1.5*RTT minimum time that

nodes take today, though with significantly less bandwidth usage.

The "low-bandwidth" mode is enabled by setting the first boolean to 0 in

a "sendcmpct" message. In this mode, peers send new block announcements

with the usual inv/headers announcements (as per BIP130, and after fully

validating the block). The receiving peer may then request the block

using a MSG_CMPCT_BLOCK getdata reqeuest, which will receive a response

of the header and short transaction IDs. In some cases no further

round-trip is needed, and the receiver can reconstruct the block and

process it as usual, taking the same 1.5*RTT minimum time that nodes

take today, though with significantly less bandwidth usage. When some

transactions were not available from local sources (ie mempool), a

getblocktxn/blocktxn roundtrip is neccessary, bringing the best-case

latency to 2.5*RTT, again with significantly less bandwidth usage than

today. Because TCP often exhibits worse transfer latency for larger data

sizes (as a multiple of RTT), total latency is expected to be reduced

even when full the 2.5*RTT transfer mechanism is used.

===New data structures===

Several new data structures are added to the P2P network to relay

compact blocks: PrefilledTransaction, HeaderAndShortIDs,

BlockTransactionsRequest, and BlockTransactions. Additionally, we

introduce a new variable-length integer encoding for use in these data

structures.

For the purposes of this section, CompactSize refers to the

variable-length integer encoding used across the existing P2P protocol

to encode array lengths, among other things, in 1, 3, 5 or 9 bytes.

====New VarInt====

TODO: I just copied this out of the src...Something that is

wiki-formatted and more descriptive should be used here isntead.

Variable-length integers: bytes are a MSB base-128 encoding of the number.

The high bit in each byte signifies whether another digit follows. To make

sure the encoding is one-to-one, one is subtracted from all but the last

digit.

Thus, the byte sequence a[] with length len, where all but the last byte

has bit 128 set, encodes the number:

(a[len-1] & 0x7F) + sum(i=1..len-1, 128

Properties:

- Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes)
- Every integer has exactly one encoding
- Encoding does not depend on size of original integer type
- No redundancy: every (infinite) byte sequence corresponds to a list

of encoded integers.

1: [0x01] 16383: [0xFE 0x7F]

127: [0x7F] 16384: [0xFF 0x00]

128: [0x80 0x00] 16511: [0x80 0xFF 0x7F]

255: [0x80 0x7F] 65535: [0x82 0xFD 0x7F]

2

Several uses of New VarInts below are "differentially encoded". For

these, instead of using raw indexes, the number encoded is the

difference between the current index and the previous index, minus one.

For example, a first index of 0 implies a real index of 0, a second

index of 0 thereafter refers to a real index of 1, etc.

====PrefilledTransaction====

A PrefilledTransaction structure is used in HeaderAndShortIDs to provide

a list of a few transactions explicitly.

{|

|Field Name||Type||Size||Encoding||Purpose

|-

|index||New VarInt||1-3 bytes||[[#New_VarInt|New VarInt]],

differentially encoded since the last PrefilledTransaction in a

list||The index into the block at which this transaction is

|-

|tx||Transaction||variable||As encoded in "tx" messages||The transaction

which is in the block at index index.

|}

====HeaderAndShortIDs====

A HeaderAndShortIDs structure is used to relay a block header, the short

transactions IDs used for matching already-available transactions, and a

select few transactions which we expect a peer may be missing.

{|

|Field Name||Type||Size||Encoding||Purpose

|-

|header||Block header||80 bytes||First 80 bytes of the block as defined

by the encoding used by "block" messages||The header of the block being

provided

|-

|nonce||uint64_t||8 bytes||Little Endian||A nonce for use in short

transaction ID calculations

|-

|shortids_length||CompactSize||1, 3, 5, or 9 bytes||As used elsewhere to

encode array lengths||The number of short transaction IDs in shortids

|-

|shortids||List of uint64_ts||8*shortids_length bytes||Little

Endian||The short transaction IDs calculated from the transactions which

were not provided explicitly in prefilledtxn

|-

|prefilledtxn_length||CompactSize||1, 3, 5, or 9 bytes||As used

elsewhere to encode array lengths||The number of prefilled transactions

in prefilledtxn

|-

|prefilledtxn||List of PrefilledTransactions||variable

size*prefilledtxn_length||As defined by PrefilledTransaction definition,

above||Used to provide the coinbase transaction and a select few which

we expect a peer may be missing

|}

====BlockTransactionsRequest====

A BlockTransactionsRequest structure is used to list transaction indexes

in a block being requested.

{|

|Field Name||Type||Size||Encoding||Purpose

|-

|blockhash||Binary blob||32 bytes||The output from a double-SHA256 of

the block header, as used elsewhere||The blockhash of the block which

the transactions being requested are in

|-

|indexes_length||New VarInt||1-3 bytes||As defined in [[#New_VarInt|New

VarInt]]||The number of transactions being requested

|-

|indexes||List of New VarInts||1-3 bytes*indexes_length||As defined in

[[#New_VarInt|New VarInt]], differentially encoded||The indexes of the

transactions being requested in the block

|}

====BlockTransactions====

A BlockTransactions structure is used to provide some of the

transactions in a block, as requested.

{|

|Field Name||Type||Size||Encoding||Purpose

|-

|blockhash||Binary blob||32 bytes||The output from a double-SHA256 of

the block header, as used elsewhere||The blockhash of the block which

the transactions being provided are in

|-

|transactions_length||New VarInt||1-3 bytes||As defined in

[[#New_VarInt|New VarInt]]||The number of transactions provided

|-

|transactions||List of Transactions||variable||As encoded in "tx"

messages||The transactions provided

|}

====Short transaction IDs====

Short transaction IDs are used to represent a transaction without

sending a full 256-bit hash. They are calculated by:

Hello all! Could someone help me with this? I am not by any means a pro with excel. I found this online which, I believe, is the answer to what I need. I just have literally no idea whatsoever on how to use that or even where to begin!

I appreciate any and all help given! thank you

Edit: here is the answer from the link in this post

'******************************************************************************* ' MODULE: CSHA256 ' FILENAME: CSHA256.cls ' AUTHOR: Phil Fresle ' CREATED: 10-Apr-2001 ' COPYRIGHT: Copyright 2001 Phil Fresle. All Rights Reserved. ' ' DESCRIPTION: ' This class is used to generate a SHA-256 'digest' or 'signature' of a string. ' The SHA-256 algorithm is one of the industry standard methods for generating ' digital signatures. It is generically known as a digest, digital signature, ' one-way encryption, hash or checksum algorithm. A common use for SHA-256 is ' for password encryption as it is one-way in nature, that does not mean that ' your passwords are not free from a dictionary attack. If you are using the ' routine for passwords, you can make it a little more secure by concatenating ' some known random characters to the password before you generate the signature ' and on subsequent tests, so even if a hacker knows you are using SHA-256 for ' your passwords, the random characters will make it harder to dictionary attack. ' ' *** CAUTION *** ' See the comment attached to the SHA256 method below regarding use on systems ' with different character sets. ' ' This is 'free' software with the following restrictions: ' ' You may not redistribute this code as a 'sample' or 'demo'. However, you are free ' to use the source code in your own code, but you may not claim that you created ' the sample code. It is expressly forbidden to sell or profit from this source code ' other than by the knowledge gained or the enhanced value added by your own code. ' ' Use of this software is also done so at your own risk. The code is supplied as ' is without warranty or guarantee of any kind. ' ' Should you wish to commission some derivative work based on this code provided ' here, or any consultancy work, please do not hesitate to contact us. ' ' Web Site: http://www.frez.co.uk ' E-mail: [email protected] ' ' MODIFICATION HISTORY: ' 10-Apr-2001 Phil Fresle Initial Version '******************************************************************************* Option Explicit

Private m_lOnBits(30) As Long Private m_l2Power(30) As Long Private K(63) As Long

Private Const BITS_TO_A_BYTE As Long = 8 Private Const BYTES_TO_A_WORD As Long = 4 Private Const BITS_TO_A_WORD As Long = BYTES_TO_A_WORD * BITS_TO_A_BYTE

'******************************************************************************* ' Class_Initialize (SUB) '******************************************************************************* Private Sub Class_Initialize() ' Could have done this with a loop calculating each value, but simply ' assigning the values is quicker - BITS SET FROM RIGHT m_lOnBits(0) = 1 ' 00000000000000000000000000000001 m_lOnBits(1) = 3 ' 00000000000000000000000000000011 m_lOnBits(2) = 7 ' 00000000000000000000000000000111 m_lOnBits(3) = 15 ' 00000000000000000000000000001111 m_lOnBits(4) = 31 ' 00000000000000000000000000011111 m_lOnBits(5) = 63 ' 00000000000000000000000000111111 m_lOnBits(6) = 127 ' 00000000000000000000000001111111 m_lOnBits(7) = 255 ' 00000000000000000000000011111111 m_lOnBits(8) = 511 ' 00000000000000000000000111111111 m_lOnBits(9) = 1023 ' 00000000000000000000001111111111 m_lOnBits(10) = 2047 ' 00000000000000000000011111111111 m_lOnBits(11) = 4095 ' 00000000000000000000111111111111 m_lOnBits(12) = 8191 ' 00000000000000000001111111111111 m_lOnBits(13) = 16383 ' 00000000000000000011111111111111 m_lOnBits(14) = 32767 ' 00000000000000000111111111111111 m_lOnBits(15) = 65535 ' 00000000000000001111111111111111 m_lOnBits(16) = 131071 ' 00000000000000011111111111111111 m_lOnBits(17) = 262143 ' 00000000000000111111111111111111 m_lOnBits(18) = 524287 ' 00000000000001111111111111111111 m_lOnBits(19) = 1048575 ' 00000000000011111111111111111111 m_lOnBits(20) = 2097151 ' 00000000000111111111111111111111 m_lOnBits(21) = 4194303 ' 00000000001111111111111111111111 m_lOnBits(22) = 8388607 ' 00000000011111111111111111111111 m_lOnBits(23) = 16777215 ' 00000000111111111111111111111111 m_lOnBits(24) = 33554431 ' 00000001111111111111111111111111 m_lOnBits(25) = 67108863 ' 00000011111111111111111111111111 m_lOnBits(26) = 134217727 ' 00000111111111111111111111111111 m_lOnBits(27) = 268435455 ' 00001111111111111111111111111111 m_lOnBits(28) = 536870911 ' 00011111111111111111111111111111 m_lOnBits(29) = 1073741823 ' 00111111111111111111111111111111 m_lOnBits(30) = 2147483647 ' 01111111111111111111111111111111

'******************************************************************************* ' LShift (FUNCTION) ' ' PARAMETERS: ' (In) - lValue - Long - The value to be shifted ' (In) - iShiftBits - Integer - The number of bits to shift the value by ' ' RETURN VALUE: ' Long - The shifted long integer ' ' DESCRIPTION: ' A left shift takes all the set binary bits and moves them left, in-filling ' with zeros in the vacated bits on the right. This function is equivalent to ' the << operator in Java and C++ '******************************************************************************* Private Function LShift(ByVal lValue As Long, _ ByVal iShiftBits As Integer) As Long ' NOTE: If you can guarantee that the Shift parameter will be in the ' range 1 to 30 you can safely strip of this first nested if structure for ' speed. ' ' A shift of zero is no shift at all. If iShiftBits = 0 Then LShift = lValue Exit Function

'******************************************************************************* ' RShift (FUNCTION) ' ' PARAMETERS: ' (In) - lValue - Long - The value to be shifted ' (In) - iShiftBits - Integer - The number of bits to shift the value by ' ' RETURN VALUE: ' Long - The shifted long integer ' ' DESCRIPTION: ' The right shift of an unsigned long integer involves shifting all the set bits ' to the right and in-filling on the left with zeros. This function is ' equivalent to the >>> operator in Java or the >> operator in C++ when used on ' an unsigned long. '******************************************************************************* Private Function RShift(ByVal lValue As Long, _ ByVal iShiftBits As Integer) As Long

'******************************************************************************* ' AddUnsigned (FUNCTION) ' ' PARAMETERS: ' (In) - lX - Long - First value ' (In) - lY - Long - Second value ' ' RETURN VALUE: ' Long - Result ' ' DESCRIPTION: ' Adds two potentially large unsigned numbers without overflowing '******************************************************************************* Private Function AddUnsigned(ByVal lX As Long, _ ByVal lY As Long) As Long Dim lX4 As Long Dim lY4 As Long Dim lX8 As Long Dim lY8 As Long Dim lResult As Long

'******************************************************************************* ' Ch (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Ch(ByVal x As Long, _ ByVal y As Long, _ ByVal z As Long) As Long Ch = ((x And y) Xor ((Not x) And z)) End Function

'******************************************************************************* ' Maj (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Maj(ByVal x As Long, _ ByVal y As Long, _ ByVal z As Long) As Long Maj = ((x And y) Xor (x And z) Xor (y And z)) End Function

'******************************************************************************* ' S (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function (rotate right) '******************************************************************************* Private Function S(ByVal x As Long, _ ByVal n As Long) As Long S = (RShift(x, (n And m_lOnBits(4))) Or LShift(x, (32 - (n And m_lOnBits(4))))) End Function

'******************************************************************************* ' R (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function (just a right shift) '******************************************************************************* Private Function R(ByVal x As Long, _ ByVal n As Long) As Long R = RShift(x, CInt(n And m_lOnBits(4))) End Function

'******************************************************************************* ' Sigma0 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Sigma0(ByVal x As Long) As Long Sigma0 = (S(x, 2) Xor S(x, 13) Xor S(x, 22)) End Function

'******************************************************************************* ' Sigma1 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Sigma1(ByVal x As Long) As Long Sigma1 = (S(x, 6) Xor S(x, 11) Xor S(x, 25)) End Function

'******************************************************************************* ' Gamma0 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Gamma0(ByVal x As Long) As Long Gamma0 = (S(x, 7) Xor S(x, 18) Xor R(x, 3)) End Function

'******************************************************************************* ' Gamma1 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Gamma1(ByVal x As Long) As Long Gamma1 = (S(x, 17) Xor S(x, 19) Xor R(x, 10)) End Function

'******************************************************************************* ' ConvertToWordArray (FUNCTION) ' ' PARAMETERS: ' (In/Out) - sMessage - String - String message ' ' RETURN VALUE: ' Long() - Converted message as long array ' ' DESCRIPTION: ' Takes the string message and puts it in a long array with padding according to ' the SHA-256 rules (similar to MD5 routine). '******************************************************************************* Private Function ConvertToWordArray(sMessage As String) As Long() Dim lMessageLength As Long Dim lNumberOfWords As Long Dim lWordArray() As Long Dim lBytePosition As Long Dim lByteCount As Long Dim lWordCount As Long Dim lByte As Long

'******************************************************************************* ' SHA256 (FUNCTION) ' ' PARAMETERS: ' (In/Out) - sMessage - String - Message to digest ' ' RETURN VALUE: ' String - The digest ' ' DESCRIPTION: ' Takes a string and uses the SHA-256 digest to produce a signature for it. ' ' NOTE: Due to the way in which the string is processed the routine assumes a ' single byte character set. VB passes unicode (2-byte) character strings, the ' ConvertToWordArray function uses on the first byte for each character. This ' has been done this way for ease of use, to make the routine truely portable ' you could accept a byte array instead, it would then be up to the calling ' routine to make sure that the byte array is generated from their string in ' a manner consistent with the string type. '******************************************************************************* Public Function SHA256(sMessage As String) As String Dim HASH(7) As Long Dim M() As Long Dim W(63) As Long Dim a As Long Dim b As Long Dim c As Long Dim d As Long Dim e As Long Dim f As Long Dim g As Long Dim h As Long Dim i As Long Dim j As Long Dim T1 As Long Dim T2 As Long

submitted by thegreatsloth to excel [link] [comments]
I appreciate any and all help given! thank you

Edit: here is the answer from the link in this post

'******************************************************************************* ' MODULE: CSHA256 ' FILENAME: CSHA256.cls ' AUTHOR: Phil Fresle ' CREATED: 10-Apr-2001 ' COPYRIGHT: Copyright 2001 Phil Fresle. All Rights Reserved. ' ' DESCRIPTION: ' This class is used to generate a SHA-256 'digest' or 'signature' of a string. ' The SHA-256 algorithm is one of the industry standard methods for generating ' digital signatures. It is generically known as a digest, digital signature, ' one-way encryption, hash or checksum algorithm. A common use for SHA-256 is ' for password encryption as it is one-way in nature, that does not mean that ' your passwords are not free from a dictionary attack. If you are using the ' routine for passwords, you can make it a little more secure by concatenating ' some known random characters to the password before you generate the signature ' and on subsequent tests, so even if a hacker knows you are using SHA-256 for ' your passwords, the random characters will make it harder to dictionary attack. ' ' *** CAUTION *** ' See the comment attached to the SHA256 method below regarding use on systems ' with different character sets. ' ' This is 'free' software with the following restrictions: ' ' You may not redistribute this code as a 'sample' or 'demo'. However, you are free ' to use the source code in your own code, but you may not claim that you created ' the sample code. It is expressly forbidden to sell or profit from this source code ' other than by the knowledge gained or the enhanced value added by your own code. ' ' Use of this software is also done so at your own risk. The code is supplied as ' is without warranty or guarantee of any kind. ' ' Should you wish to commission some derivative work based on this code provided ' here, or any consultancy work, please do not hesitate to contact us. ' ' Web Site: http://www.frez.co.uk ' E-mail: [email protected] ' ' MODIFICATION HISTORY: ' 10-Apr-2001 Phil Fresle Initial Version '******************************************************************************* Option Explicit

Private m_lOnBits(30) As Long Private m_l2Power(30) As Long Private K(63) As Long

Private Const BITS_TO_A_BYTE As Long = 8 Private Const BYTES_TO_A_WORD As Long = 4 Private Const BITS_TO_A_WORD As Long = BYTES_TO_A_WORD * BITS_TO_A_BYTE

'******************************************************************************* ' Class_Initialize (SUB) '******************************************************************************* Private Sub Class_Initialize() ' Could have done this with a loop calculating each value, but simply ' assigning the values is quicker - BITS SET FROM RIGHT m_lOnBits(0) = 1 ' 00000000000000000000000000000001 m_lOnBits(1) = 3 ' 00000000000000000000000000000011 m_lOnBits(2) = 7 ' 00000000000000000000000000000111 m_lOnBits(3) = 15 ' 00000000000000000000000000001111 m_lOnBits(4) = 31 ' 00000000000000000000000000011111 m_lOnBits(5) = 63 ' 00000000000000000000000000111111 m_lOnBits(6) = 127 ' 00000000000000000000000001111111 m_lOnBits(7) = 255 ' 00000000000000000000000011111111 m_lOnBits(8) = 511 ' 00000000000000000000000111111111 m_lOnBits(9) = 1023 ' 00000000000000000000001111111111 m_lOnBits(10) = 2047 ' 00000000000000000000011111111111 m_lOnBits(11) = 4095 ' 00000000000000000000111111111111 m_lOnBits(12) = 8191 ' 00000000000000000001111111111111 m_lOnBits(13) = 16383 ' 00000000000000000011111111111111 m_lOnBits(14) = 32767 ' 00000000000000000111111111111111 m_lOnBits(15) = 65535 ' 00000000000000001111111111111111 m_lOnBits(16) = 131071 ' 00000000000000011111111111111111 m_lOnBits(17) = 262143 ' 00000000000000111111111111111111 m_lOnBits(18) = 524287 ' 00000000000001111111111111111111 m_lOnBits(19) = 1048575 ' 00000000000011111111111111111111 m_lOnBits(20) = 2097151 ' 00000000000111111111111111111111 m_lOnBits(21) = 4194303 ' 00000000001111111111111111111111 m_lOnBits(22) = 8388607 ' 00000000011111111111111111111111 m_lOnBits(23) = 16777215 ' 00000000111111111111111111111111 m_lOnBits(24) = 33554431 ' 00000001111111111111111111111111 m_lOnBits(25) = 67108863 ' 00000011111111111111111111111111 m_lOnBits(26) = 134217727 ' 00000111111111111111111111111111 m_lOnBits(27) = 268435455 ' 00001111111111111111111111111111 m_lOnBits(28) = 536870911 ' 00011111111111111111111111111111 m_lOnBits(29) = 1073741823 ' 00111111111111111111111111111111 m_lOnBits(30) = 2147483647 ' 01111111111111111111111111111111

' Could have done this with a loop calculating each value, but simply ' assigning the values is quicker - POWERS OF 2 m_l2Power(0) = 1 ' 00000000000000000000000000000001 m_l2Power(1) = 2 ' 00000000000000000000000000000010 m_l2Power(2) = 4 ' 00000000000000000000000000000100 m_l2Power(3) = 8 ' 00000000000000000000000000001000 m_l2Power(4) = 16 ' 00000000000000000000000000010000 m_l2Power(5) = 32 ' 00000000000000000000000000100000 m_l2Power(6) = 64 ' 00000000000000000000000001000000 m_l2Power(7) = 128 ' 00000000000000000000000010000000 m_l2Power(8) = 256 ' 00000000000000000000000100000000 m_l2Power(9) = 512 ' 00000000000000000000001000000000 m_l2Power(10) = 1024 ' 00000000000000000000010000000000 m_l2Power(11) = 2048 ' 00000000000000000000100000000000 m_l2Power(12) = 4096 ' 00000000000000000001000000000000 m_l2Power(13) = 8192 ' 00000000000000000010000000000000 m_l2Power(14) = 16384 ' 00000000000000000100000000000000 m_l2Power(15) = 32768 ' 00000000000000001000000000000000 m_l2Power(16) = 65536 ' 00000000000000010000000000000000 m_l2Power(17) = 131072 ' 00000000000000100000000000000000 m_l2Power(18) = 262144 ' 00000000000001000000000000000000 m_l2Power(19) = 524288 ' 00000000000010000000000000000000 m_l2Power(20) = 1048576 ' 00000000000100000000000000000000 m_l2Power(21) = 2097152 ' 00000000001000000000000000000000 m_l2Power(22) = 4194304 ' 00000000010000000000000000000000 m_l2Power(23) = 8388608 ' 00000000100000000000000000000000 m_l2Power(24) = 16777216 ' 00000001000000000000000000000000 m_l2Power(25) = 33554432 ' 00000010000000000000000000000000 m_l2Power(26) = 67108864 ' 00000100000000000000000000000000 m_l2Power(27) = 134217728 ' 00001000000000000000000000000000 m_l2Power(28) = 268435456 ' 00010000000000000000000000000000 m_l2Power(29) = 536870912 ' 00100000000000000000000000000000 m_l2Power(30) = 1073741824 ' 01000000000000000000000000000000 ' Just put together the K array once K(0) = &H428A2F98 K(1) = &H71374491 K(2) = &HB5C0FBCF K(3) = &HE9B5DBA5 K(4) = &H3956C25B K(5) = &H59F111F1 K(6) = &H923F82A4 K(7) = &HAB1C5ED5 K(8) = &HD807AA98 K(9) = &H12835B01 K(10) = &H243185BE K(11) = &H550C7DC3 K(12) = &H72BE5D74 K(13) = &H80DEB1FE K(14) = &H9BDC06A7 K(15) = &HC19BF174 K(16) = &HE49B69C1 K(17) = &HEFBE4786 K(18) = &HFC19DC6 K(19) = &H240CA1CC K(20) = &H2DE92C6F K(21) = &H4A7484AA K(22) = &H5CB0A9DC K(23) = &H76F988DA K(24) = &H983E5152 K(25) = &HA831C66D K(26) = &HB00327C8 K(27) = &HBF597FC7 K(28) = &HC6E00BF3 K(29) = &HD5A79147 K(30) = &H6CA6351 K(31) = &H14292967 K(32) = &H27B70A85 K(33) = &H2E1B2138 K(34) = &H4D2C6DFC K(35) = &H53380D13 K(36) = &H650A7354 K(37) = &H766A0ABB K(38) = &H81C2C92E K(39) = &H92722C85 K(40) = &HA2BFE8A1 K(41) = &HA81A664B K(42) = &HC24B8B70 K(43) = &HC76C51A3 K(44) = &HD192E819 K(45) = &HD6990624 K(46) = &HF40E3585 K(47) = &H106AA070 K(48) = &H19A4C116 K(49) = &H1E376C08 K(50) = &H2748774C K(51) = &H34B0BCB5 K(52) = &H391C0CB3 K(53) = &H4ED8AA4A K(54) = &H5B9CCA4F K(55) = &H682E6FF3 K(56) = &H748F82EE K(57) = &H78A5636F K(58) = &H84C87814 K(59) = &H8CC70208 K(60) = &H90BEFFFA K(61) = &HA4506CEB K(62) = &HBEF9A3F7 K(63) = &HC67178F2End Sub

'******************************************************************************* ' LShift (FUNCTION) ' ' PARAMETERS: ' (In) - lValue - Long - The value to be shifted ' (In) - iShiftBits - Integer - The number of bits to shift the value by ' ' RETURN VALUE: ' Long - The shifted long integer ' ' DESCRIPTION: ' A left shift takes all the set binary bits and moves them left, in-filling ' with zeros in the vacated bits on the right. This function is equivalent to ' the << operator in Java and C++ '******************************************************************************* Private Function LShift(ByVal lValue As Long, _ ByVal iShiftBits As Integer) As Long ' NOTE: If you can guarantee that the Shift parameter will be in the ' range 1 to 30 you can safely strip of this first nested if structure for ' speed. ' ' A shift of zero is no shift at all. If iShiftBits = 0 Then LShift = lValue Exit Function

' A shift of 31 will result in the right most bit becoming the left most ' bit and all other bits being cleared ElseIf iShiftBits = 31 Then If lValue And 1 Then LShift = &H80000000 Else LShift = 0 End If Exit Function ' A shift of less than zero or more than 31 is undefined ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If ' If the left most bit that remains will end up in the negative bit ' position (&H80000000) we would end up with an overflow if we took the ' standard route. We need to strip the left most bit and add it back ' afterwards. If (lValue And m_l2Power(31 - iShiftBits)) Then ' (Value And OnBits(31 - (Shift + 1))) chops off the left most bits that ' we are shifting into, but also the left most bit we still want as this ' is going to end up in the negative bit marker position (&H80000000). ' After the multiplication/shift we Or the result with &H80000000 to ' turn the negative bit on. LShift = ((lValue And m_lOnBits(31 - (iShiftBits + 1))) * _ m_l2Power(iShiftBits)) Or &H80000000 Else ' (Value And OnBits(31-Shift)) chops off the left most bits that we are ' shifting into so we do not get an overflow error when we do the ' multiplication/shift LShift = ((lValue And m_lOnBits(31 - iShiftBits)) * _ m_l2Power(iShiftBits)) End IfEnd Function

'******************************************************************************* ' RShift (FUNCTION) ' ' PARAMETERS: ' (In) - lValue - Long - The value to be shifted ' (In) - iShiftBits - Integer - The number of bits to shift the value by ' ' RETURN VALUE: ' Long - The shifted long integer ' ' DESCRIPTION: ' The right shift of an unsigned long integer involves shifting all the set bits ' to the right and in-filling on the left with zeros. This function is ' equivalent to the >>> operator in Java or the >> operator in C++ when used on ' an unsigned long. '******************************************************************************* Private Function RShift(ByVal lValue As Long, _ ByVal iShiftBits As Integer) As Long

' NOTE: If you can guarantee that the Shift parameter will be in the ' range 1 to 30 you can safely strip of this first nested if structure for ' speed. ' ' A shift of zero is no shift at all If iShiftBits = 0 Then RShift = lValue Exit Function ' A shift of 31 will clear all bits and move the left most bit to the right ' most bit position ElseIf iShiftBits = 31 Then If lValue And &H80000000 Then RShift = 1 Else RShift = 0 End If Exit Function ' A shift of less than zero or more than 31 is undefined ElseIf iShiftBits < 0 Or iShiftBits > 31 Then Err.Raise 6 End If ' We do not care about the top most bit or the final bit, the top most bit ' will be taken into account in the next stage, the final bit (whether it ' is an odd number or not) is being shifted into, so we do not give a jot ' about it RShift = (lValue And &H7FFFFFFE) \ m_l2Power(iShiftBits) ' If the top most bit (&H80000000) was set we need to do things differently ' as in a normal VB signed long integer the top most bit is used to indicate ' the sign of the number, when it is set it is a negative number, so just ' deviding by a factor of 2 as above would not work. ' NOTE: (lValue And &H80000000) is equivalent to (lValue < 0), you could ' get a very marginal speed improvement by changing the test to (lValue < 0) If (lValue And &H80000000) Then ' We take the value computed so far, and then add the left most negative ' bit after it has been shifted to the right the appropriate number of ' places RShift = (RShift Or (&H40000000 \ m_l2Power(iShiftBits - 1))) End IfEnd Function

'******************************************************************************* ' AddUnsigned (FUNCTION) ' ' PARAMETERS: ' (In) - lX - Long - First value ' (In) - lY - Long - Second value ' ' RETURN VALUE: ' Long - Result ' ' DESCRIPTION: ' Adds two potentially large unsigned numbers without overflowing '******************************************************************************* Private Function AddUnsigned(ByVal lX As Long, _ ByVal lY As Long) As Long Dim lX4 As Long Dim lY4 As Long Dim lX8 As Long Dim lY8 As Long Dim lResult As Long

lX8 = lX And &H80000000 lY8 = lY And &H80000000 lX4 = lX And &H40000000 lY4 = lY And &H40000000 lResult = (lX And &H3FFFFFFF) + (lY And &H3FFFFFFF) If lX4 And lY4 Then lResult = lResult Xor &H80000000 Xor lX8 Xor lY8 ElseIf lX4 Or lY4 Then If lResult And &H40000000 Then lResult = lResult Xor &HC0000000 Xor lX8 Xor lY8 Else lResult = lResult Xor &H40000000 Xor lX8 Xor lY8 End If Else lResult = lResult Xor lX8 Xor lY8 End If AddUnsigned = lResultEnd Function

'******************************************************************************* ' Ch (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Ch(ByVal x As Long, _ ByVal y As Long, _ ByVal z As Long) As Long Ch = ((x And y) Xor ((Not x) And z)) End Function

'******************************************************************************* ' Maj (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Maj(ByVal x As Long, _ ByVal y As Long, _ ByVal z As Long) As Long Maj = ((x And y) Xor (x And z) Xor (y And z)) End Function

'******************************************************************************* ' S (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function (rotate right) '******************************************************************************* Private Function S(ByVal x As Long, _ ByVal n As Long) As Long S = (RShift(x, (n And m_lOnBits(4))) Or LShift(x, (32 - (n And m_lOnBits(4))))) End Function

'******************************************************************************* ' R (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function (just a right shift) '******************************************************************************* Private Function R(ByVal x As Long, _ ByVal n As Long) As Long R = RShift(x, CInt(n And m_lOnBits(4))) End Function

'******************************************************************************* ' Sigma0 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Sigma0(ByVal x As Long) As Long Sigma0 = (S(x, 2) Xor S(x, 13) Xor S(x, 22)) End Function

'******************************************************************************* ' Sigma1 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Sigma1(ByVal x As Long) As Long Sigma1 = (S(x, 6) Xor S(x, 11) Xor S(x, 25)) End Function

'******************************************************************************* ' Gamma0 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Gamma0(ByVal x As Long) As Long Gamma0 = (S(x, 7) Xor S(x, 18) Xor R(x, 3)) End Function

'******************************************************************************* ' Gamma1 (FUNCTION) ' ' DESCRIPTION: ' SHA-256 function '******************************************************************************* Private Function Gamma1(ByVal x As Long) As Long Gamma1 = (S(x, 17) Xor S(x, 19) Xor R(x, 10)) End Function

'******************************************************************************* ' ConvertToWordArray (FUNCTION) ' ' PARAMETERS: ' (In/Out) - sMessage - String - String message ' ' RETURN VALUE: ' Long() - Converted message as long array ' ' DESCRIPTION: ' Takes the string message and puts it in a long array with padding according to ' the SHA-256 rules (similar to MD5 routine). '******************************************************************************* Private Function ConvertToWordArray(sMessage As String) As Long() Dim lMessageLength As Long Dim lNumberOfWords As Long Dim lWordArray() As Long Dim lBytePosition As Long Dim lByteCount As Long Dim lWordCount As Long Dim lByte As Long

Const MODULUS_BITS As Long = 512 Const CONGRUENT_BITS As Long = 448 lMessageLength = Len(sMessage) ' Get padded number of words. Message needs to be congruent to 448 bits, ' modulo 512 bits. If it is exactly congruent to 448 bits, modulo 512 bits ' it must still have another 512 bits added. 512 bits = 64 bytes ' (or 16 * 4 byte words), 448 bits = 56 bytes. This means lNumberOfWords must ' be a multiple of 16 (i.e. 16 * 4 (bytes) * 8 (bits)) lNumberOfWords = (((lMessageLength + _ ((MODULUS_BITS - CONGRUENT_BITS) \ BITS_TO_A_BYTE)) \ _ (MODULUS_BITS \ BITS_TO_A_BYTE)) + 1) * _ (MODULUS_BITS \ BITS_TO_A_WORD) ReDim lWordArray(lNumberOfWords - 1) ' Combine each block of 4 bytes (ascii code of character) into one long ' value and store in the message. The high-order (most significant) bit of ' each byte is listed first. However, unlike MD5 we put the high-order ' (most significant) byte first in each word. lBytePosition = 0 lByteCount = 0 Do Until lByteCount >= lMessageLength ' Each word is 4 bytes lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE ' NOTE: This is where we are using just the first byte of each unicode ' character, you may want to make the change here, or to the SHA256 method ' so it accepts a byte array. lByte = AscB(Mid(sMessage, lByteCount + 1, 1)) lWordArray(lWordCount) = lWordArray(lWordCount) Or LShift(lByte, lBytePosition) lByteCount = lByteCount + 1 Loop ' Terminate according to SHA-256 rules with a 1 bit, zeros and the length in ' bits stored in the last two words lWordCount = lByteCount \ BYTES_TO_A_WORD lBytePosition = (3 - (lByteCount Mod BYTES_TO_A_WORD)) * BITS_TO_A_BYTE ' Add a terminating 1 bit, all the rest of the bits to the end of the ' word array will default to zero lWordArray(lWordCount) = lWordArray(lWordCount) Or _ LShift(&H80, lBytePosition) ' We put the length of the message in bits into the last two words, to get ' the length in bits we need to multiply by 8 (or left shift 3). This left ' shifted value is put in the last word. Any bits shifted off the left edge ' need to be put in the penultimate word, we can work out which bits by shifting ' right the length by 29 bits. lWordArray(lNumberOfWords - 1) = LShift(lMessageLength, 3) lWordArray(lNumberOfWords - 2) = RShift(lMessageLength, 29) ConvertToWordArray = lWordArrayEnd Function

'******************************************************************************* ' SHA256 (FUNCTION) ' ' PARAMETERS: ' (In/Out) - sMessage - String - Message to digest ' ' RETURN VALUE: ' String - The digest ' ' DESCRIPTION: ' Takes a string and uses the SHA-256 digest to produce a signature for it. ' ' NOTE: Due to the way in which the string is processed the routine assumes a ' single byte character set. VB passes unicode (2-byte) character strings, the ' ConvertToWordArray function uses on the first byte for each character. This ' has been done this way for ease of use, to make the routine truely portable ' you could accept a byte array instead, it would then be up to the calling ' routine to make sure that the byte array is generated from their string in ' a manner consistent with the string type. '******************************************************************************* Public Function SHA256(sMessage As String) As String Dim HASH(7) As Long Dim M() As Long Dim W(63) As Long Dim a As Long Dim b As Long Dim c As Long Dim d As Long Dim e As Long Dim f As Long Dim g As Long Dim h As Long Dim i As Long Dim j As Long Dim T1 As Long Dim T2 As Long

' Initial hash values HASH(0) = &H6A09E667 HASH(1) = &HBB67AE85 HASH(2) = &H3C6EF372 HASH(3) = &HA54FF53A HASH(4) = &H510E527F HASH(5) = &H9B05688C HASH(6) = &H1F83D9AB HASH(7) = &H5BE0CD19 ' Preprocessing. Append padding bits and length and convert to words M = ConvertToWordArray(sMessage) ' Main loop For i = 0 To UBound(M) Step 16 a = HASH(0) b = HASH(1) c = HASH(2) d = HASH(3) e = HASH(4) f = HASH(5) g = HASH(6) h = HASH(7) For j = 0 To 63 If j < 16 Then W(j) = M(j + i) Else W(j) = AddUnsigned(AddUnsigned(AddUnsigned(Gamma1(W(j - 2)), _ W(j - 7)), Gamma0(W(j - 15))), W(j - 16)) End If T1 = AddUnsigned(AddUnsigned(AddUnsigned(AddUnsigned(h, Sigma1(e)), _ Ch(e, f, g)), K(j)), W(j)) T2 = AddUnsigned(Sigma0(a), Maj(a, b, c)) h = g g = f f = e e = AddUnsigned(d, T1) d = c c = b b = a a = AddUnsigned(T1, T2) Next HASH(0) = AddUnsigned(a, HASH(0)) HASH(1) = AddUnsigned(b, HASH(1)) HASH(2) = AddUnsigned(c, HASH(2)) HASH(3) = AddUnsigned(d, HASH(3)) HASH(4) = AddUnsigned(e, HASH(4)) HASH(5) = AddUnsigned(f, HASH(5)) HASH(6) = AddUnsigned(g, HASH(6)) HASH(7) = AddUnsigned(h, HASH(7)) Next ' Output the 256 bit digest SHA256 = LCase(Right("00000000" & Hex(HASH(0)), 8) & _ Right("00000000" & Hex(HASH(1)), 8) & _ Right("00000000" & Hex(HASH(2)), 8) & _ Right("00000000" & Hex(HASH(3)), 8) & _ Right("00000000" & Hex(HASH(4)), 8) & _ Right("00000000" & Hex(HASH(5)), 8) & _ Right("00000000" & Hex(HASH(6)), 8) & _ Right("00000000" & Hex(HASH(7)), 8))End Function

Binary, Asynchronous Counters at Farnell. Competitive prices from the leading Binary, Asynchronous Counters distributor. Check our stock now! The IC CD4060 is a 14-bit Binary Counter IC from Texas Instruments. It has 12 output pins ranging from Q1 to Q14 excluding Q2 and Q3. When an Input clock pulse is given to the pin for each pulse the binary value gets incremented from 00 0000 0000 0000 to 11 1111 1111 1111 which is equivalent for 0 to 16383 in decimal. The imutilsc binary is in the same location as imcl: <IMbin>/eclipse/tools Additional options can be used to provide proxy credentials, and to specify a master password that is used to provide better encryption for the credentials file. If you installed the WAS 8.5 repository (HBBO850) at fix pack level 8.5.5.2 or above, Here is a brief summary chart illustrating the mathematical powers of two, shown in binary, decimal, and hexadecimal notation.. - The table goes up to the 64th power of two. This power-of-2 chart is grouped into - 8-bit-long computer bytes and 16-bit-long word organization, showing address space vs. A 14-bit ITU national point code containing all zeros is a valid point code and can be entered into the database.. When the EAGLE is delivered to the user, the format of the 14-bit ITU national point code is set to 14-0-0-0 (a single number containing up to five digits). If the 14-bit ITU national point code is a single number, the value of the point code is from 1 to 16383.

[index] [5036] [16210] [10493] [24412] [18072] [63] [13674] [12910] [14176] [30340]

Full Flight – Delta Air Lines – Airbus A220-100 – DFW-SLC – N116DU – IFS Ep. 288 - Duration: 2:08:55. Skylite Productions Recommended for you 【TOO DIFFICULT Lv.11】16383(MEGA) All PERFECT OMEGA Rank【Dynamix】 - Duration: 2:30. なのふらわー / nanoflower 14,697 views. 2:30 【TOO DIFFICULT Lv.11】16383(MEGA) All PERFECT OMEGA Rank【Dynamix】 - Duration: 2:30. なのふらわー / nanoflower 14,697 views. 2:30 Map Name : Fast Forward (Hard~ Insane Demon) Map ID : 52189217 Gameplay : (4/5) 16383. 【TOO DIFFICULT Lv.11】16383(MEGA) All PERFECT OMEGA Rank【Dynamix】 - Duration: 2:30. なのふらわー / nanoflower 14,985 views. 2:30