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.