Niezawodne Systemy Informatyczne

Transkrypt

Niezawodne Systemy Informatyczne
Niezawodne Systemy
Informatyczne
Lista 4
PRZEMYSŁAW KOBYLAŃSKI
Zadanie 1
Bez wnikania w szczegóły, w kodowaniu Base64 chodzi o zamianę ciągu wartości ośmiobitowych
(zakres 0 .. 255) na ciąg wartości sześciobitowych (zakres 0 .. 63).
Poniżej przedstawiono przykład zakodowania ciągu trzech wartości 65, 66, 65 w ciąg czterech
wartości 16, 20, 9, 1:
65
66
65
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
1
0
0
0
0
1
0
0
1
0
0
0
0
0
1
16
20
9
1
W poniższej specyfikacji pakietu Base64 wartości ośmiobitowe reprezentowane są typem Octet a
sześciobitowe typem Sextet.
pragma SPARK_Mode(on);
package Base64 is
type Octet is mod 2**8;
type Sextet is mod 2**6;
type Data_Type is array (Positive range <>) of Octet;
type Encoded_Data_Type is array (Positive range <>) of Sextet;
function Encode (D : in Data_Type) return Encoded_Data_Type
with
Pre => D'Length rem 3 = 0 and D'Last < Positive'Last / 4,
Post => Encode'Result'Length = 4 * (D'Length / 3) and Decode(Encode'Result) = D;
function Decode (E : in Encoded_Data_Type) return Data_Type
with
Pre => E'Length rem 4 = 0 and E'Last < Positive'Last / 3,
Post => Decode'Result'Length = 3 * (E'Length / 4) and Encode(Decode'Result) = E;
end Base64;
Ciągi oktetów i sekstetów reprezentowane są w postaci tablic Data_Type i Encoded_Data_Type.
Zwróć uwagę na zastosowanie typów modularnych Octet i Sextet, co umożliwia wykorzystanie
operacji bitowych (np. and, or, xor).
Dla uproszczenia programu przyjęto, że ciąg do zakodowania (tablica będąca argumentem funkcji
Encode) ma długość będącą wielokrotnością liczby 3. Podobnie ciąg do odkodowania (tablica
będąca argumentem funkcji Decode) ma długość będącą wielokrotnością liczby 4.
W kontraktach podano, że wyniki funkcji kodującej i dekodującej spełniają następujące równania:
Decode(Encode(D)) = D,
Encode(Decode(E)) = E,
gdzie D jest ciągiem oktetów a E jest ciągiem sekstetów.
Polecenie
Napisz treść pakietu Base64 i przeprowadź formalną weryfikację podanych kontraktów.